私はベースとして 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
実行中のコンテナを保持するためにプライマリサービスとしてApacheを使用する場合、再起動することはできません。単にイメージを構築し、それでCMDを設定したからです。
CMDの主な目的は、実行中のコンテナーにデフォルトを提供することです。これらのデフォルトには実行可能ファイルを含めることも、実行可能ファイルを省略することもできます。その場合は、ENTRYPOINT命令も指定する必要があります。
サービスを再起動せずにリロードしてみてください:
/etc/init.d/Apache2 reload
これに対する私の解決策は、bash Shellを終了してコンテナーに入れ、Dockerの外でコンテナーを再起動することでした。 Apacheはプライマリサービスとして設定されているため、Apacheも再起動され、コンテナーがクラッシュすることはありません。
docker restart <container>
コンテナをカスタマイズしたい、いくつかの拡張機能をインストールする必要があり、それらを機能させるには、変更を有効にするためにApacheを再起動する必要があります。
これは、Dockerの不変のインフラストラクチャの原則に反しています。私見、あなたは完全な仮想マシンに似たドッカーコンテナを使用しています。代わりに、Dockerイメージを最終的なアーティファクトとして扱い、バージョン管理することをお勧めします。 注:これは単なる謙虚な意見であり、あなたは私が知らない有効なユースケースを持っているかもしれません。
Sudo docker kill --signal="USR1" your_appache_container
以下を達成するために使用できるその他の信号:
Stop Now Signal:[〜#〜] term [〜#〜]
グレースフルリスタート信号:USR1
今すぐ再起動信号:[〜#〜] hup [〜#〜]
グレースフルストップシグナル:[〜#〜] winch [〜#〜]
From:このウェブサイト
しかし、行く前に、Apacheは再起動中に失敗しますか?それが終了する方法ですか?その場合は、正しい構成を設定し、それらのログを見て実行してください。
試すことができる方法の1つは、コンテナーにログインして(bashに)、常にdocker commitが機能する時点で実行できることです。その後、ベースコンテナイメージをそれに変更できます。
異なる[〜#〜] entrypoint [〜#を使用して、これらのcommittedから新しいイメージを構築することにより、同様の状況の回避策がありました。 〜]はDockefileにあります。