Docker を使用してバックグラウンドでコンテナーを継続的に実行する
バックグラウンドで実行されると、Docker はコンテナーを自動的に終了します。 ただし、プロセスが終了してもインスタンスが引き続き実行されるようにする必要がある特定のインスタンスがあります。 この記事では、バックグラウンドで docker コンテナーを実行し続ける方法について説明します。
バックグラウンドで Docker コンテナを実行する
コンテナーを実行する方法を簡素化したい場合は、次のようにコンテナーをバックグラウンドで実行する必要があります。
docker run -d image sample
以下のもので実行する代わりに:
docker run -i -t image sample
-d
を使用することをお勧めします。これは、たった 1つのコマンドでコンテナーを実行でき、Ctrl+P + < を押してコンテナーのターミナルを切り離す必要がないためです。 kbd>Q.
ただし、-d
パラメータには問題があります。 その結果、コマンドがフォアグラウンドで実行されていない限り、コンテナーはすぐに停止します。
コンテナーで Apache サービスを実行する場合を使用して、これを説明しましょう。 これを行う直感的な方法は次のとおりです。
docker run -d apache-server apachectl start
ただし、Apache Daemon をデタッチすると apachectl
が終了するため、開始されたコンテナーはすぐに停止します。
Docker はこれを好みません。 Docker では、コマンドをフォアグラウンドで実行し続ける必要があります。 そうしないと、アプリケーションが停止してコンテナーをシャットダウンしたと見なされます。
コンテナをフォアグラウンドで実行する
これは、フォアグラウンド オプションを指定して apache 実行可能ファイルを直接実行することで解決できます。
docker run -d apache-server /usr/sbin/apache2 -D NO_DETACH -D FOREGROUND
ここでは、apachectl
が行うことを手動で行い、apache 実行可能ファイルを実行します。 このアプローチでは、apache はフォアグラウンドで実行され続けます。
繰り返しになりますが、Unix ベースのイメージごとにプロセスが異なることに注意してください。
問題は、一部のアプリケーションがフォアグラウンドで実行されないことです。 また、環境変数を自分でエクスポートするなど、追加の作業を行う必要があります。
この状況では、コマンドに tail -f /dev/null
を追加できます。 tail
がフォアグラウンドで実行され続けるため、コンテナーは停止しません。
この手法は、前のケースで使用できます。
docker run -d apache-server apachectl start && tail -f /dev/null
tail -f /dev/null
は害を及ぼさないため、この回避策を任意のアプリケーションに使用できます。
コンテナを無期限に実行する
デーモン -d
モードでコンテナーを無期限に存続させるもう 1つの簡単な方法は、コンテナーの引数として sleep infinity
を実行することです。 これは、デーモン モードでの TTY の割り当てなどの奇妙なアクションの実行とは無関係です。
sleep
をデフォルトコマンドにするなど、コマンドは独特ですが。
docker run -d apache-server sleep infinity
また、-t
パラメータは pseudo-tty
を割り当てますが、これもうまくいくはずです。 これにより、インタラクティブな TTY に接続されていると見なされるため、bash が実行を継続するように操作されます。
docker run -t -d apache-server
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn