wake-up-neo.net

Wie starte ich Apache2 neu, ohne dass der Docker-Container abstürzt?

Ich benutze als Basis den php Docker Container mit dem Tag:

php:5.6-Apache

Wenn ich versuche, den Apache2 im Container neu zu starten, stoppt der Container:

[email protected]:/var/www/html# service Apache2 restart
Restarting web server: Apache2Terminated
[email protected]:/var/www/html#
[email protected]:

Wie starte ich Apache2 neu, ohne den Container zu stoppen?

Ich möchte mit dem Container herumspielen und ihn anpassen, bevor ich meine Änderungen in die Docker-Datei stecke. Ich möchte einige Erweiterungen installieren und damit sie funktionieren, muss ich Apache neu starten, damit die Änderungen wirksam werden.

Dies ist die Logdatei über:

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
13
k0pernikus

Wenn Sie Apache als primären Dienst verwenden, um den aktiven Container beizubehalten, können Sie ihn NICHT neu starten. Ganz einfach, weil Sie das Bild erstellt und das CMD damit festgelegt haben.

Der Hauptzweck einer CMD besteht darin, Standardwerte für einen ausgeführten Container bereitzustellen. Diese Standardwerte können eine ausführbare Datei enthalten oder sie können die ausführbare Datei weglassen. In diesem Fall müssen Sie auch eine ENTRYPOINT-Anweisung angeben.

Versuchen Sie, neu zu laden, ohne einen Dienst neu zu starten:

/etc/init.d/Apache2 reload
22

Meine Lösung für dieses Problem bestand darin, meine bash-Shell in den Container zu verlassen und den Container einfach außerhalb von Docker neu zu starten. Da Apache als primärer Dienst festgelegt ist, wird auch Apache neu gestartet, und der Container wird nicht abgestürzt.

docker restart <container>
2
Tim Malone

Aber bevor Sie loslegen, schlägt Ihr Apache während des Neustarts fehl? So geht es aus? In diesem Fall müssen Sie die richtige Konfiguration vornehmen und sich diese Protokolle ansehen.

Eine der Methoden, die Sie ausprobieren können, ist das Anmelden beim Container (bei bash), und Sie könnten immer ein docker commit an einem Punkt haben, an dem es funktioniert. Sie können dann Ihr Basiscontainer-Image darauf ändern.

Ich hatte Problemumgehungen für ähnliche Situationen, indem ich aus diesen Festgeschriebenen Bildern neue Bilder erstellte, indem ich verschiedeneEINGRIFFSPUNKTEin meinem Dockefile verwendete.

0
Vineeth

Ich möchte den Container anpassen, ich muss eine Erweiterung .__ installieren. und damit sie funktionieren, muss ich Apache neu starten, damit die Änderungen wirksam werden bewirken.

Dies ist gegen das unveränderliche Infrastrukturprinzip des Dockers. IMHO, Sie verwenden den Docker-Container ähnlich einer voll ausgebauten VM. Stattdessen würde ich Ihnen vorschlagen, das Docker-Image als das letzte Artefakt und die Version zu behandeln .Anmerkung: Dies ist nur meine bescheidene Meinung, Sie haben möglicherweise eine gültige Usecase, die ich nicht kenne, die ich nicht kenne bin neugierig herauszufinden.

0
so-random-dude

Sudo docker kill --signal="USR1" your_appache_container

Andere Signale, mit denen Sie Folgendes erreichen können:

Stop Now Signal: TERM

Graceful Restart Signal: USR1

Jetzt neu starten Signal: HUP

Anmutiges Stoppsignal: WINCH

From:diese Website

0
Destrif