🐳

[docker] python環境がexitedしてしまう問題

2025/03/23に公開1

解決方法

以下をdocker-compose.yml(exitedしてしまうコンテナの末尾)に記載

command: tail -f /dev/null

あとは以下でコンテナに入って、好きなpythonファイルを実行するだけ。

docker exec -it コンテナ名 bash

test.pyを実行

root@dfjhi987fkj:/python# python test.py

なぜ解決するのか

  • 基本的にdockerはcommandを実行し終えたらコンテナが停止する。
  • 起動し続けるには、何かが実行状態でなければいけない
  • -f コマンドで何もせずに待機する状態を作る

tail -f /dev/null の説明:

command: tail -f /dev/null
  • tail コマンドは通常、ファイルの末尾を監視するために使用されます。
  • /dev/null は特殊なデバイスファイルで、何も出力しない空のデータソースです。
  • -f オプションを付けることで、tail は終了せずに待機状態を維持します。

docker exec -it コンテナ名 bash の説明:

docker exec -it test-container bash

これにより、test-container コンテナ内に入って操作ができます。

Discussion

dameyodamedamedameyodamedame

例えば普通に起動すると、停止に10秒かかります(最終的にSIGKILLされる)

$ docker run --name tailf -d --rm ubuntu tail -f /dev/null
...
$ docker stop tailf
(10秒くらいかかって)
tailf
$

しかし、--initを付けて起動すると、tiniが噛まされてある程度綺麗に止められます。

$ docker run --init --name tailf -d --rm ubuntu tail -f /dev/null
...
$ docker stop tailf
tailf
$

なお、tail -fはデフォルト1秒ごとに入力を調べます。これよりはsleep infinityの方がよりコストが低そうです(最大時間待つだけで無限ではないけど)。