🐳

Dockerコンテナの起動ができないと思っていたら一瞬で落ちていた話

に公開

DockerでDebianコンテナが一瞬で消えた話

発生事象:-itオプションのつけ忘れによる落とし穴

DockerでDebian環境などのOS系のコンテナを試そうとしたとき、コンテナが一瞬で終了してしまったことはありませんか?一見起動自体が失敗したか?と困ってしまうところですね。
今回は、-itオプションを付け忘れたことで起きた「秒で消えるコンテナ事件」を振り返りつつ、原因と対処法をまとめます。

  • 問題の発端:何気なく打ったこのコマンド
docker run debian
  • 結果:エラーは起きていないのにプロセスがいない・・・
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# → 何も表示されない
  • aオプションで確認すると、コンテナは起動していたけどすぐに終了していた!
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS                     PORTS     NAMES
a1b2c3d4e5f6   debian    "bash"    2 seconds ago   Exited (0) 1 second ago              nostalgic_babbage

原因:-it オプションがないと、標準入力が接続されず bash が即終了

  • Dockerの仕様に立ち返る
    Dockerコンテナはメインプロセスが終了するとコンテナも終了する仕様になっている。
  • 今回の発生原因
    Debianイメージは、特にコマンドを指定しない場合 bash を起動します。 しかし、-it(-i=標準入力を開く、-t=擬似端末を割り当てる)を付けないと、bashは「誰も操作してくれない」と判断して即終了します。

では正しい起動方法は??

docker run -it debian

これで、インタラクティブなシェルが開きます

root@a1b2c3d4e5f6:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

バックグラウンド実行するようなプロセスを立ち上げている場合は問題なく起動できます!
ほかのオプションも参考までに・・・

つまずきポイントのまとめ

❌ -it なし コンテナは即終了。何もできない。
✅ -it あり bashがインタラクティブに起動。操作可能。

コンテナを起動し続けて、好きな時にシェルを起動する方法は以下にまとめています

https://zenn.dev/engineer_k/articles/132d051150b817

体系的に学びたい方向けに・・・

Dockerを体系的に学びたい方はこちらの講座を開設したのでぜひ!
3時間ほどの講義で一通りのDockerの基本が学べますよ。
https://www.udemy.com/course/dockerwindowspc/?referralCode=6EDF0B9CB44057ACC299

Discussion