バックグラウンド・モードのコンテナ

コンテナをバックグラウンド・モードで起動するには、--detachを付ける。オプションはまとめて-ditとするのが便利。

コンテナが起動したらすぐにホストの端末を解放して、ホストのシェルとして入出力を継続するときに使う。要するにサーバ起動とか。

httpdサーバの例

# -dit: コンテナはバックグラウンド・モード
# --publishでホストのポート80をコンテナのポート80につなぐ
docker run --rm -dit --name test --publish 80:80 httpd:2.4 httpd-foreground

# 引き続きホストのシェルとして端末を使える

# 動作確認
curl localhost
<html><body><h1>It works!</h1></body></html>

# コンテナ停止・削除
docker stop test

サーバなどはこのバックグラウンド・モードにフォアグラウンドのコマンドを渡す。


バックグラウンドのサーバプロセスはすぐコンテナ停止

バックグラウンドのプロセスだけだとコンテナは停止するので、ホストでやるようなサーバ起動のコマンドを使うと、うまくいかない。

コンテナ起動のバックグラウンド・モード(--detach)と、ここでいうコマンドのバックグラウンド実行は別物。

# -dit: コンテナはバックグラウンド・モード
# 引数末尾: 単なるhttpdコマンドはバックグラウンド実行
docker run --rm -dit --name test --publish 80:80 httpd:2.4 httpd

# すぐにコンテナは停止してしまう
docker ps --filter=name=test

# httpdはフォアグラウンドにする
docker run --rm -dit --name test --publish 80:80 httpd:2.4 httpd -D FOREGROUND

# 動作確認
curl localhost
<html><body><h1>It works!</h1></body></html>

# コンテナ停止・削除
docker stop test

上記はhttpdコマンドの場合だが、コマンド(サーバ)ごとに用意されているフォアグラウンドのやり方で引数を渡す。なければ、フォアグラウンドにできないコマンドへの対処へ。