180 votes

Comment faire fonctionner Nginx dans un conteneur Docker sans s'arrêter ?

J'ai installé Nginx sur un conteneur Docker, et j'essaie de l'exécuter comme ceci :

docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx

Le problème est que la façon dont Nginx fonctionne, est que le processus initial génère immédiatement un processus Nginx maître et quelques travailleurs, puis se termine. Comme Docker ne surveille que le PID de la commande initiale, le conteneur s'arrête alors.

Comment empêcher le conteneur de s'arrêter ? J'ai besoin de pouvoir lui dire de se lier au premier processus enfant, ou d'empêcher le processus initial de Nginx de se terminer.

255voto

shavenwarthog Points 2451

Pour développer la réponse de Charles Duffy, Nginx utilise l'option daemon off pour s'exécuter en avant-plan. S'il n'est pas pratique de mettre cette directive dans le fichier de configuration, nous pouvons la spécifier directement sur la ligne de commande. Cela permet de s'exécuter en mode débogage (avant-plan) et de passer directement en mode production (arrière-plan) en modifiant les paramètres de la ligne de commande.

Pour fonctionner en avant-plan :

nginx -g 'daemon off;'

Pour fonctionner en arrière-plan :

nginx

204voto

Charles Duffy Points 34134

nginx comme tous les programmes qui se comportent bien, peut être configuré pour ne pas s'auto-démoniser.

Utilisez le daemon off décrite dans la directive de configuration http://wiki.nginx.org/CoreModule .

80voto

Tomer Ben David Points 36

Pour approfondir la réponse de John, vous pouvez également utiliser la méthode suivante Dockerfile CMD comme suit (au cas où vous voudriez qu'elle se lance toute seule sans arcs supplémentaires)

CMD ["nginx", "-g", "daemon off;"]

30voto

number5 Points 3749

Pour information, à ce jour (22 octobre 2019) images docker officielles de Nginx tous ont une ligne :

CMD ["nginx", "-g", "daemon off;"]

par exemple https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117

12voto

Afshin Mehrabani Points 4174

L'ajout de cette commande à Dockerfile peut le désactiver :

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X