🐳
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がインタラクティブに起動。操作可能。
コンテナを起動し続けて、好きな時にシェルを起動する方法は以下にまとめています
体系的に学びたい方向けに・・・
Dockerを体系的に学びたい方はこちらの講座を開設したのでぜひ!
3時間ほどの講義で一通りのDockerの基本が学べますよ。
Discussion