🐳
[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の方がよりコストが低そうです(最大時間待つだけで無限ではないけど)。