web-dev-qa-db-fra.com

Comment redémarrer Apache2 sans planter le conteneur Docker?

J'utilise comme base le conteneur php docker avec le tag:

php:5.6-Apache

Lorsque j'essaie de redémarrer Apache2 à l'intérieur du conteneur, celui-ci s'arrête:

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

Comment redémarrer Apache2 sans arrêter le conteneur?

Je souhaite jouer avec le conteneur et le personnaliser avant de transférer mes modifications dans le fichier docker. Je souhaite installer une extension et pour que cela fonctionne, je dois redémarrer Apache pour que les modifications prennent effet.

Ceci est le fichier journal via:

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

Si vous utilisez Apache comme service principal pour conserver votre conteneur en cours d'exécution, vous ne pouvez PAS le redémarrer. Tout simplement parce que vous avez construit l'image et paramétrez le CMD avec.

L'objectif principal d'un CMD est de fournir des valeurs par défaut pour un conteneur en cours d'exécution. Ces valeurs par défaut peuvent inclure un exécutable ou peuvent être omises. Dans ce cas, vous devez également spécifier une instruction ENTRYPOINT.

Essayez de recharger sans redémarrer un service:

/etc/init.d/Apache2 reload
22
Cauê Alves Braz

Ma solution à cela était de sortir mon shell bash dans le conteneur et de redémarrer le conteneur en dehors de Docker. Comme Apache est défini en tant que service principal, cela redémarre également Apache et ne bloque pas le conteneur.

docker restart <container>
2
Tim Malone

Mais avant de partir, votre Apache échoue-t-il lors du redémarrage? Thats comment ça se passe? Dans ce cas, veuillez le faire fonctionner en définissant les bonnes configurations et en consultant ces journaux.

Une méthode que vous pouvez essayer est de vous connecter au conteneur (à bash) et vous pouvez toujours avoir un docker commit à un moment où cela fonctionne. Vous pouvez ensuite changer votre image de conteneur de base pour cela.

J'ai eu des solutions de contournement pour des situations similaires en construisant de nouvelles images à partir de celles commit en utilisant différentsENTRYPOINTdans mon fichier Dock.

0
Vineeth

Je veux personnaliser le conteneur, je dois installer une extension et pour qu’ils fonctionnent, j’ai besoin de redémarrer Apache pour que les modifications soient prises effet.

Cela va à l'encontre du principe d'infrastructure immuable de Docker. IMHO, vous utilisez le conteneur docker similaire à un ordinateur virtuel complet. Au lieu de cela, je vous suggérerais de traiter l'image du menu fixe comme l'artefact final et de la version .Remarque: Ceci est juste mon humble avis, vous pouvez avoir un cas d'utilisation valide dont je ne suis pas au courant, que je suis curieux de découvrir.

0
so-random-dude

Sudo docker kill --signal="USR1" your_appache_container

Autres signaux que vous pouvez utiliser pour atteindre les objectifs suivants:

Stop Now Signal: TERM

Signal de redémarrage gracieux: USR1

Redémarrer maintenant Signal: HUP

Signal d'arrêt gracieux: WINCH

De:ce site

0
Destrif