質問: Dockerfileの記述についての質問になります。 ◼️困っている事 ENTRYPOINTの箇所(もしくはCMD)の箇所を認識できないためdocker runに失敗する ※docker runコマンドではエラーにならないが、docker psのステータスがExitedになりサービスが起動しない 以下のようなDokcerfileがあります。 ``` #Dockerfile FROM mongo:latest ~割愛~ COPY startUp.sh /tmp/startUp.sh RUN chmod 777 /tmp/startUp.sh EXPOSE 80 9000 27071 ENTRYPOINT ["/tmp/startUp.sh"] ``` このDockerfileでbuildは出来るのですがdocker runを行った際にstatusがExitedとなり起動してくれません。 docker runをした際にENTRYPOINTの箇所でエラーになっているところまでは絞り込めました。 何か他に特別な記述が必要なのでしょうか?どなたかご存知の方よろしくお願いします。 startUp.shの内容 ``` #!/bin/bash echo '123' > /tmp/test.txt ``` ◼️環境 ホストOSはOS X Dockerのimageはmongodbをdockerhubから指定 aptでnginx,phpをインストールしています。 ◼️試した事 docker buildとrun時のコマンド ``` $docker build -t test-nginx:1.0 . $docker run -d test-nginx:1.0 ``` ENTRYPOINT/CMDで以下の記述だと、docker runに成功する ``` ENTRYPOINT ["mongod"] もしくは ENTRYPOINT ["nginx", "-g", "daemon off;"] ``` run時にサービスの立ち上げを行うために複数のコマンドを実行させるつもりです。 CMDに複数コマンドが指定できないため、それならばシェルで起動しようかと考えていたのですが、シェルスクリプトはCMDで許可されていないのでしょうか? ./bashrcで良いかなとも思いましたがdocker run時のオプションに関係なく一律同じコマンドを読み込んで欲しいので。 docker build => docker run時にnginx,php-fpm,mongodをそれぞれ実行するために試行錯誤してこの方法を取ることにしましたが、どなたか解決できる方がいればお願いします...。
回答: startUp.sh が実行後、すぐに終了するので、コンテナ自体が終了しているのだと思います。 mongod, nginx のように、フォアグラウンドで起動し続けるプロセスが必要です。 複数のプロセスを実行するのであれば、最後のプロセスだけフォアグラウンドで実行するようにするといいと思います。