2016-04-01 7 views
3

が見つかりませんnodejsドッカーは

FROM ruby:2.1 
RUN rm /bin/sh && ln -s /bin/bash /bin/sh 
ENV NVM_DIR /usr/local/nvm 
ENV NODE_VERSION 4.4.2 

RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash \ 
    && source $NVM_DIR/nvm.sh \ 
    && nvm install $NODE_VERSION \ 
    && nvm alias default $NODE_VERSION \ 
    && nvm use default 


ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules 
ENV PATH  $NVM_DIR/v$NODE_VERSION/bin:$PATH 

RUN node -v 

私は次のエラーを取得する:

Step 9 : RUN node -v ---> Running in 6e3fac36d2fc /bin/sh: node: command not found The command '/bin/sh -c node -v' returned a non-zero code: 127

ノードがパスに見つからない理由を理解することはできません。私は同様にnvm.shファイルを実行しようとしましたが、効果がありませんでした。

+1

は、なぜあなたは、コンテナ内のNVMを使用していますか?コンテナ内に異なるバージョンのノードが必要な場合は、その中に異なるバージョンの新しいイメージを作成するだけです。 – L0j1k

+1

ええ、あなたの権利、実際のポイントはちょうどそれが動作していない理由に立ち往生していない。以下のように変更してください 'RUN curl -sL https://deb.nodesource.com/setup_4.x | bash - RUN apt-get install -y nodejs' – jamescharlesworth

+1

将来の人達のために、私は答えをタイプします。 – L0j1k

答えて

6

Node Managerは、開発マシンでNode.jsのバージョンを切り替えるための優れたアプリケーションですが、Dockerは特定の種類のイメージ/コンテナ設計を要請しています。これは、一時的なものでもなく、マイクロサービスの「ベストプラクティス」をサポートする。 Dockerは、完全なVMではなく、プロセスを実行するための素晴らしい方法です。その最後の文は、Dockerについて考えていく上で私を助けてくれました。ここでは、複数のバージョンのNode.jsを含む1つのコンテナを内部に作成するのではなく、イメージの異なるバージョンを作成することで、自分で簡単に作業を行うことができます。このようにして、正しいバージョンを選択するようにNVMを取得しようとする環境変数を入力する代わりに、docker runコマンドの中で実行するNodeバージョンを参照できます。たとえば:

docker build -t=jamescharlesworth-node:4.x-latest . 

そしてもちろん、あなたのDockerfileは、あなたがコメントで言及あなたのRUNディレクティブで、その中にinstallコマンドがあります:

RUN curl -sL https://deb.nodesource.com/setup_4.x | bash - 
RUN apt-get install -y nodejs 
関連する問題