質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.19%

Dockerfile CMDが実行されない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,860

wp-h

score 135

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をそれぞれ実行するために試行錯誤してこの方法を取ることにしましたが、どなたか解決できる方がいればお願いします...。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

startUp.sh が実行後、すぐに終了するので、コンテナ自体が終了しているのだと思います。
mongod, nginx のように、フォアグラウンドで起動し続けるプロセスが必要です。
複数のプロセスを実行するのであれば、最後のプロセスだけフォアグラウンドで実行するようにするといいと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

恐らくこのようにすると動くと思います。

ENTRYPOINT ["sh", "/tmp/startUp.sh"]

もしそれでもダメならば

$ docker logs {コンテナID}

を見ると原因がわかるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/11 20:50

    なるほどそうかと思い,ENTRYPOINT ["source", "/tmp/startUp.sh"]も試してみましたが、同じ結果でした。
    docker logは何も表示なしでした。。。
    (他の正常起動コンテナにはinfoレベルの情報があがることを確認しています。)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る