一言いっておかなければならない事があります。
「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