2016-09-05 3 views
0

node.js Dockerイメージを作成しました。 Dockerfileの末尾にCMD node myapp.jsを使用して起動します。 しかし、CMD /root/start.shを使用すると失敗します。 、standard_init_linux.go:175: exec user process caused "no such file or directory"は、しかし、私は理解していない :私が手docker logsを使用しシェルスクリプトでノードアプリケーションを起動できません

FROM debian:latest 
COPY config/start.sh /root/start.sh 
RUN chmod +x /root/start.sh 
WORKDIR /my/app/directory 

RUN apt-get install -y wget && \ 
wget https://nodejs.org/dist/latest-v5.x/node-v5.12.0-linux-x64.tar.gz && \ 
tar -C /usr/local --strip-components 1 -xzf node-v5.12.0-linux-x64.tar.gz && \ 
rm -f node-v5.12.0-linux-x64.tar.gz && \ 
ln -s /usr/bin/nodejs /usr/bin/node 

# works: 
CMD node myapp.js 

# doesn't work: 
CMD /root/start.sh 

#!/bin/bash 
node myapp.js 

そして、ここが重要な私のDockerfileの線です:

は、これは私のstart.shがどのように見えるかですDockerfileにRUN ls /rootを追加すると、そのファイルが存在することがわかります。 スクリプト内でフルパスで試してみました。

#!/bin/bash 
/usr/bin/node /my/app/directory/myapp.js 

何も変更されていません。それでは、何が問題なのでしょうか?

+0

あなたはどのイメージをビルドしていますか? – Matt

+0

@Matt:Dockerfile – Munchkin

+0

'/ usr/local/bin/node'にいくつかのエントリを追加しましたか? – Matt

答えて

1

docker run -entrypoint="/bin/bash" -i your_imageを使用してください。

シェルフォームdockerfile CMDです。ドキュメントに記載されているように、デフォルトのシェルのバイナリはなく、あなたの期待/bin/bashstart.shでライン1

それともCMD ["/root/start.sh"]ある幹部フォームを、使用してみて、/bin/shです。

+0

'debian'イメージにはbashがインストールされているので、スクリプトに使用できます。 – Matt

1

私が見た最も一般的なエラーは、Windowsシステムでstart.shを作成し、ファイルを別の文字エンコーディングで保存するか、またはWindowsの改行を含むことです。 /bin/bash^M/bin/bashと同じではありませんが、Windowsでは改行が表示されません。また、マルチ文字UTFエンコーディングではなくASCIIエンコーディングでファイルを保存することもできます。

+0

ありがとう、そのヒントしかし、それは問題ではありませんでした。しかし、多分私の次の問題と関係がありますか? Dockerfileの中で 'sed -i"/PLACEHOLDER/$ myvar/g "" /full/path/to/my/file.js "'と 'RUN 'を使用すると動作します。しかし、私の 'start.sh'スクリプトの中でこの行を使うと、" no such file or directory "というエラーが出ます。私は完全な道を与えたので、分かりません。 – Munchkin

関連する問題