Docker4 択難易度 応用

状況

Dockerfile に EXPOSE 8000 を書いたイメージを docker run -d --name app myapi:1.0 で起動。ホストで curl localhost:8000 は Connection refused。docker ps の PORTS は 8000/tcp で、矢印(->)が無い。

最も疑わしい原因は?

  1. Aアプリが 8000 番ではなく別のポートで待ち受けている
  2. Bコンテナが起動直後に終了している
  3. Cイメージのビルドキャッシュが古い
  4. DEXPOSE だけで、-p によるポートの公開をしていない

正答

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

解説

EXPOSE はイメージの作者が「このポートを使う」と書き残すための命令で、それだけではホストに公開されない。docker ps の PORTS が 8000/tcp だけで、0.0.0.0:8000->8000/tcp のような矢印が無いのは、公開していない印である。docker run -p 8000:8000 を付けて起動し直す。docker ps に表示されている以上、コンテナは動いている(B は否定)。待ち受けポートの違い(A)は、公開した後もつながらないときに疑うもの。ビルドキャッシュ(C)はポートの公開の有無とは関係がない。

参考: docs.docker.com

portexposetroubleshooting

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

Dockerクイズへ