docker-composeでコンテナを継続させるためにはttyのtrueを使う

DockerでPythonの勉強をする時に、新しいコンテナを作成しても終了してしまう事がありました。

これはDockerにてフォアグラウンドで実行しているプログラムが無い時に起きる現象です。

もしコンテナが直ぐ終了してしまう現象が起きた際にはttyを使って回避してみましょう。

目次

docker-compose.ymlの記述例

version: '3'

services:
  python:
    image: python:latest
    restart: always
    container_name: python
    tty: true

docker-compose.ymltty:trueを記述するだけでOKです。

TTYって結局何をしているの?

専門的な解説は他記事にて分かりやすく説明されていたので、そちらを見ると良いでしょう。

記事が削除される可能性と、私の備忘録としても簡単な要約を合わせて記述しておきます。

docker-compose.ymltty: true設定は、Dockerコンテナに擬似端末(キーボードによる入力)を結びつける設定です。これはdocker run -it <container_name>-tオプションに相当します。

具体的には、docker-compose.ymltty: trueと設定すると、/dev/ptsに端末が追加されると考えられます。この設定をすることで、コンテナが正常終了するのを防ぐことができます。例えば、Goコンテナを起動したら正常終了しますが、それはGoコンテナにフォアグラウンドで実行するプロセスがないため、そのままDockerがコンテナを終了させています。

そこでtty: trueです。これを設定することでコンテナ側に仮想端末を置いて実行しているプロセスを用意してあげることによってコンテナを持続させることができます。正常終了してしまうと、コンテナの中に入ってサーバーを立てたりすることができないので、なんらかのフォアグラウンドで実行するプロセスが必要になります。その役割がDockerのTTYということです。

なお、TTYを設定する必要のあるコンテナは、コンテナを継続させたい場合や、Dockerの起動プロセスでフォアグラウンドで実行しているプログラムがない場合に限られます。

DockerのTTYって何?

あとがき

専門的な解説は少し知識が無いと、ちんぷんかんぷんですね。

もし分からなくても、コンテナが正常終了してしまう場合は、おまじないとしてtty:trueを記述すれば良い。と覚えておけば良いでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。

reCAPTCHAの認証時間が切れたため、ページを再読み込みしてください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次