DockerでPythonの勉強をする時に、新しいコンテナを作成しても終了してしまう事がありました。
これはDockerにてフォアグラウンドで実行しているプログラムが無い時に起きる現象です。
もしコンテナが直ぐ終了してしまう現象が起きた際にはttyを使って回避してみましょう。
docker-compose.ymlの記述例
version: '3'
services:
python:
image: python:latest
restart: always
container_name: python
tty: true
docker-compose.yml
にtty:true
を記述するだけでOKです。
TTYって結局何をしているの?
専門的な解説は他記事にて分かりやすく説明されていたので、そちらを見ると良いでしょう。
docker-compose.yml
のtty: true
設定は、Dockerコンテナに擬似端末(キーボードによる入力)を結びつける設定です。これはdocker run -it <container_name>
の-t
オプションに相当します。具体的には、
docker-compose.yml
にtty: true
と設定すると、/dev/pts
に端末が追加されると考えられます。この設定をすることで、コンテナが正常終了するのを防ぐことができます。例えば、Goコンテナを起動したら正常終了しますが、それはGoコンテナにフォアグラウンドで実行するプロセスがないため、そのままDockerがコンテナを終了させています。そこで
tty: true
です。これを設定することでコンテナ側に仮想端末を置いて実行しているプロセスを用意してあげることによってコンテナを持続させることができます。正常終了してしまうと、コンテナの中に入ってサーバーを立てたりすることができないので、なんらかのフォアグラウンドで実行するプロセスが必要になります。その役割がDockerのTTYということです。なお、TTYを設定する必要のあるコンテナは、コンテナを継続させたい場合や、Dockerの起動プロセスでフォアグラウンドで実行しているプログラムがない場合に限られます。
DockerのTTYって何?
あとがき

専門的な解説は少し知識が無いと、ちんぷんかんぷんですね。
もし分からなくても、コンテナが正常終了してしまう場合は、おまじないとしてtty:true
を記述すれば良い。と覚えておけば良いでしょう。
コメント