🐳
[docker] python環境がexitedしてしまう問題
解決方法
以下を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
例えば普通に起動すると、停止に10秒かかります(最終的にSIGKILLされる)
しかし、--initを付けて起動すると、tiniが噛まされてある程度綺麗に止められます。
なお、
tail -f
はデフォルト1秒ごとに入力を調べます。これよりはsleep infinity
の方がよりコストが低そうです(最大時間待つだけで無限ではないけど)。