2016-11-13 4 views
1

ここでDockerfileは画像image/nameを作成してからコンテナを作成するために実行されますが、docker psレポートサービスは終了しました。ウェブサイトを提供するが、これをやっていないためには稼働し続けることが期待されていた。どのように修正することができますか?コンテナがバックグラウンドで実行される代わりに終了する

//Dockerfile 
FROM lambdalinux/baseimage-amzn:2016.09-000 
RUN curl --silent --location https://rpm.nodesource.com/setup_4.x | bash - 
RUN yum install -y tar nodejs 
COPY ./bundle /opt/bundle/ 
WORKDIR /opt/bundle/programs/server/ 
RUN npm install 
CMD node ./main.js 

、コマンドラインでdocker run -tid -p 80:80 image/name

+1

自分で 'node。/ main.js'を実行すると、フォアグラウンドに留まるのでしょうか、それともバックグラウンドで終了するのでしょうか? – larsks

+0

私のように、コンテナ内のあなたのサービスが出てくるので、コンテナも同様です。あなたはコンテナのログを調べましたか? '' dockerはサーバのプロンプトに ''あなたのコンテナ名 '' '' –

+0

@larsksを記録し、 'node。/ main.js'はコマンドを見つけられません。' docker logs'はエラーを報告しません。これはノードがインストールされていないことを私に伝える... hummm –

答えて

0

それは些細な誤りであるルックス。それはmain.jsはすなわちDockerfileの最後の行ごとに/ディレクトリの下で利用可能であることが期待されている


CMD node ./main.js

はしかし、私はmain.js/opt/bundle/programs/server/ディレクトリの下で利用可能である、と信じています。

mainアプリケーションを実行するオプションがあります。画像を変更することなく

1に:

だけdocker runを変更して、画像を変更せずに

docker run -tid -p 80:80 image/name node /opt/bundle/programs/server/main.js 

2を呼び出すことがどのアプリケーション伝える:コンテナにホストからローカルディレクトリをマウント:

同じ第1の場合と同様に。アプリケーションがサイドイメージで利用可能ではなく、ホスト/ローカルマシンで利用可能であると仮定しよう。そのため、ローカルディレクトリをコンテナにマウントし、そのアプリケーションを実行します。この場合、現在のディレクトリにアプリケーションapp2.jsがあります。

docker run -p 80:80 -v $(pwd):/share -itd image/name node /share/app2.js 

3修正画像、CMD絶対パス参照:

は、既存の画像を削除します。 Dockerfileを変更して、今すぐイメージを再構築

CMD node /opt/bundle/programs/server/main.js 

CMD node ./main.js 

から以下のステートメントを変更します。この場合、コンテナを実行している間は、コマンドで実行するアプリケーションを指定する必要はありません。上記とは異なり、オプション#1、#2が表示される場合、コンテナの実行時に呼び出されるアプリケーションも指定されます。代わりに、イメージがデフォルトで実行されるアプリケーションを知っているので、単にイメージを実行できます。ドッカー容器仕上げ/内部で実行中のプロセスを完了したとき

docker run -tid -p 80:80 image/name 

Exited状態が示されています。

main.jsは正しい場所に配置できませんでした。プロセスはすぐに終了し、コンテナはケースから抜け出しました。

希望すると便利です。

関連する問題