質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

5275閲覧

laradock環境でWorkspace内のnodeのバージョンが変更出来ない。

chikuwanabe

総合スコア12

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2018/03/27 14:10

編集2018/03/28 01:04

Workspace内のバージョンを変更したい。

vpsサーバにlaradockを利用してlaravelの環境(nginx・mysql)を構築しました。
ただ、Workspace内のnode.jsのバージョンがv9.9だったため、nodebrewをインストールして安定版であるv8.10に変更して、バージョンが変更された事も確認出来たのですが、暫く時間が経つとまたv9.9になってしまいます。
どこか、設定ファイル等に記述があり、この方法では変更出来ないのでしょうか。
はたまた、ここでnode.jsのバージョンを変更しようとしている事は間違っているのでしょうか。

dockerに詳しい方ご教示宜しくお願いします。

さくらvpsにdocker-composeをインストールし、laradockのプロジェクトファイルを一式var/www配下にアップロードし、build及びupして、nginx,mysql,php-fpm,workspaceが立ち上がっている状態。

・laradockディレクトリに移動

command

1# cd var/www/laradock

・Workspaceに入る

command

1# docker-compose exec workspace bash

command

1# node -v

ここではnodeはv9.9.0

・nodebrewでバージョン変更する為にnodebrewをインストール

command

1# curl -L git.io/nodebrew | perl - setup

command

1# export PATH=$HOME/.nodebrew/current/bin:$PATH

・nodebreでバージョン変更

# nodebrew use stable
# node -V

確認するとnodeはv8.1.0になっている

・一旦Workspaceからログアウトして、再度Workspaceに入る。

exit

command

1# docker-compose exec workspace bash

すると、nodebrewコマンドも使えなくなり、バージョンも9.9に戻っている...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xenbeat

2018/03/27 14:39

色々と情報が足りないので追記ください。①> nodebrewをインストールして安定版であるv8.10に変更 → ホストではなくコンテナ内で行った?②>暫く時間が経つとまたv9.9になってしまいます → 時間が経つ間に何をした?再現手順を明記ください。③https://github.com/laradock/laradockをそのまま利用していますか?一部パラメータを変えている等、変更を加えている部分があれば明記ください。
chikuwanabe

2018/03/27 16:20

御質問有難う御座います。①nodebrewのインストール及びバージョン変更はlaradockディレクトリで 「docker-compose exec workspace bash」でWorkspaceに入り、行っております。②変更後は「exit」でサーバからすぐに出ておりましたので操作は何もしておりません。③設定はmysqlのバージョンを8.0から5.7に変更しました。宜しくお願い致します。
xenbeat

2018/03/27 16:30 編集

①OK②手元でコマンド・再現手順(exec→nodebrew use→node -v→exit→exec→node -v)を再確認してその結果を質問文に追記いただけますか。③OK。MySQLの設定以外はデフォルトで使っているということですね。
chikuwanabe

2018/03/27 16:49

②再現しようとしたところnodebrewも使えなくなっていた為「curl -L git.io/nodebrew | perl - setup」「export PATH=$HOME/.nodebrew/current/bin:$PATH」でnodebrewをもう一度インストールしました。その後「nodebrew use stable」で変更し、v8.10になった事を「node -v」で確認しました。そして「exit」でWorkspaceから出て再度入り直すとv9.9に戻っており、nodebrewも使えなくなっておりました。Workspace内でこの変更をしようとしている事自体が間違っているのでしょうか..
xenbeat

2018/03/27 16:58 編集

ここだと見にくい上に他の回答者に共有する意味でも、ここの「質問への追記・修正の依頼」ではなく「質問文」に具体的に実行したコマンドそしてその結果(エラー、バージョン等)一連の手順を明記ください。nodebrewも使えなくなっていた、Workspaceから出て再度入り直す(compose stopしていない?)等が曖昧です。
xenbeat

2018/03/27 17:01 編集

誰しも質問者さんと全く同じ環境を持っているわけではないので、質問者さん環境、そこで具体的にやったこと(一連の手順)、そしてそこで発生したエラーが情報として最低限必要なのです。面倒かもしれませんがご理解ください。
chikuwanabe

2018/03/28 00:46

ご指摘有難う御座います。ここでの質問に慣れていなかった為コメント欄でやり取りしてしまいました。。申し訳ないです。以後「質問文」の方に追記致します。環境に関しましても承知致しました。
guest

回答2

0

exportコマンドでPATHを設定しているのでexit時に消えているのでしょう。
どうしてもnodebrewでないといけないんだという特別な理由があるのなら、Dockerfileをカスタマイズしたり、スクリプトを書かないといけないのですが、
特にnodebrew自体にはこだわりがなく、nodeのバージョン管理ツールで好きなnodeのバージョンをインストールしたいということでしたらlaradockがその仕組みをnvmで提供しているようなのでそのお作法に従った方が良いでしょう。
そのあたりの知識がないならなおさらです。
以下参考にされてください。

// nodeのインストール設定
http://laradock.io/documentation/#install-node-nvm

// nodeのバージョン設定
https://github.com/laradock/laradock/blob/master/env-example#L96

投稿2018/03/28 05:29

xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chikuwanabe

2018/03/28 06:03

諸々本当にありがとうございました! laradock内の仕組みを確認してみます。
guest

0

ベストアンサー

一言いっておかなければならない事があります。
「Dockerはそういう使い方するものじゃないから!!!」

それとは別に、今回の件の動作に関してはLinuxの根本の挙動に関係する所なので
別途解説していきます。

なぜnodebrewコマンドが利用出来ていないのか?

export PATH=$HOME/.nodebrew/current/bin:$PATHこの1文が原因です。
これはLinuxやUnixのシェルとして動作するBashの書き方です。
「今ログインしているユーザーの環境変数PATHを右辺の文字列で再代入してくれ」という意味があります。

BashのPATHは:という区切り文字で区切るルールがあり、
xxxx:$PATHという書き方をした場合、
既存のPATHはそのままに左側に新しいPATHを追加してくださいという意味になります。

Bash

1$ export PATH=$HOME/.nodebrew/current/bin:$PATH 2 3# 環境変数PATHを出力してみます、恐らくこんな感じのPATHになっていることでしょう 4$ echo $PATH 5/root/.nodebrew/current/bin:xxxx:xxxx:xxxx

しかし、このexportは今ログインしているユーザーと説明しました。
つまり再度ログインし直すとこの設定は消し飛びます。

なので、nodebrewコマンドを再度有効にしたければ、
ログインする度にexport PATH=$HOME/.nodebrew/current/bin:$PATHを実行してください
まじかよ、そんな面倒な事したくないぞ…というわけで、
~/.bashrcというログインする度に上から順番にコマンドとして実行してくれるファイルがBashには用意されています。

此処までは一般的なLinuxやUnixの話です。
Dockerではコンテナ内の.bashrcに書き込んでも無駄です。

Linuxマシンは複数ユーザーがログイン出来る仕様になっていますからね。
貴方が別枠のユーザーとしてログインしてexport PATH=$HOME/.nodebrew/current/bin:$PATHを実行しても、
別のユーザーであるdocker-composeを利用して立ち上がったロボットのユーザーには何も影響がありません。


はたまた、ここでnode.jsのバージョンを変更しようとしている事は間違っているのでしょうか。

結論から言うと間違っています。

DockerのコンテナはImageから一時的に複製された実体です。
docker-compose stop; docker-compose rm -fで終了したら消える儚い命なのです。
ですので、コンテナの内部でNode.jsの安定版をインストールして展開しても無駄です。

変更したければDockerfileの方を修正してください。
ちょっと私と一緒に追ってみましょうか。

まず、質問文にあったようにLaradock/docker-compose.ymlを確認します。
workspaceのNode.jsのバージョンを落としたいんでしたっけ?

なら、この辺の記述が該当するでしょう。

YAML

1 workspace: 2 build: 3 context: ./workspace 4 args: 5 - INSTALL_XDEBUG=${WORKSPACE_INSTALL_XDEBUG} 6 - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE} 7 - INSTALL_SOAP=${WORKSPACE_INSTALL_SOAP} 8 # パラメータが多すぎるので割愛 9 dockerfile: "Dockerfile-${PHP_VERSION}"

環境変数のPHP_VERSIONに依存するようにDockerfileが決定されるようですが、
ここでは/workspace/Dockerfile-72にスポットを当ててみましょうか。

最初に元になったイメージのFROM laradock/workspace:2.0-72ってなんやねん?
laradock/workspace - DockerHubで公開されていましたね。
こんな感じでDockerHubで追えば分かるのでたどってみてください。
因みに更に辿ってphusion/baseimageも調べた所、どうやらピュアなubuntuのようですね。

まぁ、Dockerfile-72の305行目以降の一連の流れを見る限り、
どうやらnodebrewではなくnvmというバージョン管理ソフトを使ってstableを導入しようとしているみたいですね。

此処のバージョンをstableという文字列から、固定文字列のv8.1.0に変更して上げる事で、
狙ったバージョンのImageを作れるようになるんじゃないでしょうか?
docker-composeでビルドしなおしてみてください。

Bash

1# 消したいイメージを探す 2$ docker images 3ubuntu latest 20c44cd7596f 4 months ago 123MB 4 5# IDの上部数文字を打ち込んで削除 6$ docker rmi -f 20c44 7 8$ docker-compose build 9 10$ docker-compose up -d workspace 11 12$ docker-compose exec workspace bash 13 14# node -v

投稿2018/03/28 05:50

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chikuwanabe

2018/03/28 06:07

「Dockerはそういう使い方するものじゃないから!!!」 分かりやすい一言有難う御座います! 色々設定している間につい普通にサーバをイジってる感覚になってしまっていました..詳しく書いて頂き有難う御座いました。 DockerFileの設定とDockerの使い方を今一度確認し直します。助かりました!
miyabi-sun

2018/03/28 06:23

Dockerfile作ろうとすると空中戦になるので非常に分かりにくいのが欠点ですね… 私も`docker exec -it xxx bash`や`docker-compose exec xxx bash`は使いまくってます。 Dockerの思想は慣れればブレイクスルーが起きると思うので是非頑張って欲しい所ですが、 結構難解で私も中々勉強が捗りませんでした。 ゆっくり思想や使い方を覚えていきましょ、また詰まったらteratailに投稿してみてくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問