状況
自作イメージを docker run -d で起動すると、すぐ止まる。docker ps -a の STATUS は Exited (0)。docker logs にエラーは無い。Dockerfile の CMD は ["sh", "-c", "./worker.sh &"]。
最も疑わしい原因は?
- Aアプリが例外で落ちている
- Bメモリ不足で強制終了された
- CCMD のプロセスがすぐ終わり、コンテナも終了した
- Dホスト側のポートが、ほかのプロセスと衝突している
正答
- A
- B
- C
- D
解説
コンテナは CMD(または ENTRYPOINT)で起動したメインのプロセスが動いている間だけ動き、そのプロセスが終わると止まる。sh -c "./worker.sh &" はワーカーを裏に回した時点でシェルが正常終了するので、終了コード 0 でコンテナごと止まる。CMD ["./worker.sh"] のように前面で動かし続ける形にする。例外で落ちたなら終了コードは 0 以外になり、ログにエラーが出る(A)。メモリ不足で強制終了されると 137 になる(B)。ポートの衝突は docker run の時点でエラーになり、起動まで進まない(D)。
参考: docs.docker.com
この問題を含む Docker のテストを制限時間つきで解く
Dockerクイズへ