こんにちはみなさん
いや、ホント、タイトル通りなんですが、しょうもないことでハマりまして。
Laradockを使っている人が増えてきたようで、私としては嬉しいところです。
そんなLaradockのworkspaceが使いやすいので、CIでも使っていたのですが、node系のコマンドを使う際に全然動かず、jsやcssのビルドができない事態に陥りました。
経緯
- CIでLaradockのworkspaceを利用してアプリケーションのビルドとデプロイをしようとした
- composerを使ってテストを走らせるところまではうまく行った
- node系のnpmやbowerを使おうとしたら、エラーが出て失敗してしまった
エラーはこんな感じです。
$ docker run --rm workspace node
container_linux.go:247: starting container process caused "exec: \"node\": executable file not found in $PATH"
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"node\": executable file not found in $PATH".
原因
タイトルでも書いてありますが、bashの対話シェルで実行しているわけではなく、docker run
にてダイレクトにコマンドが実行されているため、.bashrcや.profileにある設定を読み込んでいないため、nodeの実行コマンドへのパスが通っていないという事態になっていました。
解決策(?)
全然応用きかないですが、Laradockのworkspaceの現在の構造を見るに、
buildnode
# !/bin/bash
. $NVM_DIR/nvm.sh && $*
こんな感じのスクリプトファイルを用意して
FROM laradock_workspace:latest
MAINTAINER Niisan <niisan@me.com>
COPY buildnode /usr/local/bin
RUN chmod +x /usr/local/bin/buildnode
みたいな感じの構成でLaradockのdocker-composeで生成されたイメージを基に別途イメージを作ってしまいます。
そうすると、
$ docker build -t niisantokyo/laradock_ws .
$ docker run -it --rm niisantokyo/laradock_ws buildnode node -v
v7.3.0
docker run -it --rm niisantokyo/laradock_ws buildnode npm -v
3.10.10
こんな感じでなんとか行きました。