1 votes

Comment faire fonctionner le service apache en continu à partir du fichier script de docker ?

J'essaie de lancer le service apache2 à partir de .sh script du dockerfile. Le 'sh' script contient 3 commandes exécutables qui sont présentées ci-dessous :

#!/bin/bash
 export DISPLAY=:0.0
 echo "pvw launcher file execution started"

 /home/data/pv/pv-5.9.0/bin/pvpython /home/data/pvw/conf/launcher.json &

 echo "pvw launcher file execution done"

 echo "Apache2 frontend exectution"
 exec apachectl -D FOREGROUND 

 echo "Starting gunicorn"
 exec python -m gunicorn --bind 172.17.0.2:9002 --keep-alive 100 --log-file temp.txt --log-level debug --timeout 600 wsgi:app

Sur cette base, le CMD dans le dockerfile se présente comme suit CMD ./start.sh .

Maintenant, quand je lance l'image docker, le conteneur fonctionne jusqu'à apache2 et maintient le terminal là.

Je veux que le conteneur exécute le service apache2, fonctionne en continu et passe à la commande suivante (gunicorn) dans le 'sh' script et exécute la commande gunicorn. Comment dois-je modifier le 'sh' script pour cela ?

1voto

mtak Points 14830

Vous exécutez Apache HTTPd en avant-plan, donc il fait exactement ce que vous lui demandez de faire. Ce que vous voulez faire est démoniser Apache, pour que l'exécution du script puisse continuer.

La manière de procéder dépend de la façon dont vous (ou votre distribution) avez configuré Apache, mais en général, la procédure suivante est suffisante :

apachectl start

au lieu de apachectl -D FOREGROUND .

Notez qu'en démonisant le processus, vous perdez la relation parent-enfant avec le processus docker, donc des choses comme docker stop peuvent cesser de fonctionner ou attendre leur délai d'expiration avant de tuer Apache. De plus, si Apache meurt, Docker ne le remarquera pas et ne redémarrera pas automatiquement le conteneur.

Une meilleure solution serait d'avoir Apache et Gunicorn dans des conteneurs Docker séparés. Si vous ne pouvez pas le faire pour une raison quelconque, utilisez un gestionnaire de processus tel que supervisord pour gérer les processus à l'intérieur du conteneur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X