状況
docker run -d --name api myapp:1.4 で ID は表示されたが、docker ps に api が出ない。docker ps -a の STATUS は Exited (1) 2 seconds ago。昨日から変えたのは環境変数ファイルだけ。
原因を調べる順番として、最も適切なものは?
- Adocker logs api で、終了直前に出たエラーを読む
- Bホストのファイアウォールで、公開ポートが開いているか
- C--no-cache でイメージを作り直して、もう一度起動する
- Ddocker inspect api で、渡った環境変数と起動コマンドを見る
正答
- C → A → D → B
- B → A → C → D
- A → D → C → B
- D → C → B → A
解説
Exited (1) は、コンテナのメインのプロセスがエラーで終了したことを示す。まず docker logs api(A)で終了直前の出力を読む。設定の読み込み失敗や接続先の誤りは、たいていここにエラー文が出る。次に、昨日変えたのは環境変数ファイルだけなので、docker inspect(D)で実際に渡った環境変数と起動コマンドを確かめる。イメージは変えていないので作り直し(C)は手間のわりに効果が薄く、ログと設定で原因が分からないときの手段。ファイアウォール(B)は外から届くかの話で、起動直後に終了する症状とは関係がない。
参考: docs.docker.com
この問題を含む Docker のテストを制限時間つきで解く
Dockerクイズへ