Docker を使用してバックグラウンドでコンテナーを継続的に実行する

Marion Paul Kenneth Mendoza 2023年6月20日
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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - Docker Container