Docker4 択難易度 応用

状況

自作イメージを docker run -d で起動すると、すぐ止まる。docker ps -a の STATUS は Exited (0)。docker logs にエラーは無い。Dockerfile の CMD は ["sh", "-c", "./worker.sh &"]。

最も疑わしい原因は?

  1. Aアプリが例外で落ちている
  2. Bメモリ不足で強制終了された
  3. CCMD のプロセスがすぐ終わり、コンテナも終了した
  4. Dホスト側のポートが、ほかのプロセスと衝突している

正答

  1. A
  2. B
  3. C
  4. D

解説

コンテナは CMD(または ENTRYPOINT)で起動したメインのプロセスが動いている間だけ動き、そのプロセスが終わると止まる。sh -c "./worker.sh &" はワーカーを裏に回した時点でシェルが正常終了するので、終了コード 0 でコンテナごと止まる。CMD ["./worker.sh"] のように前面で動かし続ける形にする。例外で落ちたなら終了コードは 0 以外になり、ログにエラーが出る(A)。メモリ不足で強制終了されると 137 になる(B)。ポートの衝突は docker run の時点でエラーになり、起動まで進まない(D)。

参考: docs.docker.com

exitedcmdtroubleshooting

この問題を含む Docker のテストを制限時間つきで解く

Dockerクイズへ