web-dev-qa-db-ja.com

Dockerコンテナを終了せずにApache2を再起動する方法は?

私はベースとして php docker container をタグとともに使用しています:

php:5.6-Apache

コンテナ内のApache2を再起動しようとすると、コンテナが停止します。

root@phalconapp:/var/www/html# service Apache2 restart
Restarting web server: Apache2Terminated
root@phaclonapp:/var/www/html#
me@myLocalComputer:

コンテナを停止せずにApache2を再起動する方法は?

Dockerfileに変更を加える前に、コンテナーをいじってカスタマイズします。拡張機能をインストールしたいのですが、それらを機能させるには、変更を有効にするためにApacheを再起動する必要があります。

これは、次のログファイルです。

Attaching to dltasklight_phlaconapp_1
phlaconapp_1 | AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
phlaconapp_1 | AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
phlaconapp_1 | [Mon May 30 10:19:24.556154 2016] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.6.22 configured -- resuming normal operations
phlaconapp_1 | [Mon May 30 10:19:24.556181 2016] [core:notice] [pid 1] AH00094: Command line: 'Apache2 -D FOREGROUND'
phlaconapp_1 | [Mon May 30 10:21:11.754993 2016] [mpm_prefork:notice] [pid 1] AH00169: caught SIGTERM, shutting down
dltasklight_phlaconapp_1 exited with code 0
19
k0pernikus

実行中のコンテナを保持するためにプライマリサービスとしてApacheを使用する場合、再起動することはできません。単にイメージを構築し、それでCMDを設定したからです。

CMDの主な目的は、実行中のコンテナーにデフォルトを提供することです。これらのデフォルトには実行可能ファイルを含めることも、実行可能ファイルを省略することもできます。その場合は、ENTRYPOINT命令も指定する必要があります。

サービスを再起動せずにリロードしてみてください:

/etc/init.d/Apache2 reload
30

これに対する私の解決策は、bash Shellを終了してコンテナーに入れ、Dockerの外でコンテナーを再起動することでした。 Apacheはプライマリサービスとして設定されているため、Apacheも再起動され、コンテナーがクラッシュすることはありません。

docker restart <container>
2
Tim Malone

コンテナをカスタマイズしたい、いくつかの拡張機能をインストールする必要があり、それらを機能させるには、変更を有効にするためにApacheを再起動する必要があります。

これは、Dockerの不変のインフラストラクチャの原則に反しています。私見、あなたは完全な仮想マシンに似たドッカーコンテナを使用しています。代わりに、Dockerイメージを最終的なアーティファクトとして扱い、バージョン管理することをお勧めします。 注:これは単なる謙虚な意見であり、あなたは私が知らない有効なユースケースを持っているかもしれません。

1
so-random-dude

Sudo docker kill --signal="USR1" your_appache_container

以下を達成するために使用できるその他の信号:

Stop Now Signal:[〜#〜] term [〜#〜]

グレースフルリスタート信号:USR1

今すぐ再起動信号:[〜#〜] hup [〜#〜]

グレースフルストップシグナル:[〜#〜] winch [〜#〜]

From:このウェブサイト

1
Destrif

しかし、行く前に、Apacheは再起動中に失敗しますか?それが終了する方法ですか?その場合は、正しい構成を設定し、それらのログを見て実行してください。

試すことができる方法の1つは、コンテナーにログインして(bashに)、常にdocker commitが機能する時点で実行できることです。その後、ベースコンテナイメージをそれに変更できます。

異なる[〜#〜] entrypoint [〜#を使用して、これらのcommittedから新しいイメージを構築することにより、同様の状況の回避策がありました。 〜]はDockefileにあります。

0
Vineeth