J'ai Nginx installé sur un conteneur Docker et j'essaye 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, c'est que le processus initial génère immédiatement un processus Nginx maître et certains travailleurs, puis se ferme. Comme Docker ne regarde que le PID de la commande d'origine, le conteneur s'arrête alors.
Comment empêcher le conteneur de s'arrêter? Je dois être capable de lui dire de se lier au premier processus enfant, ou d'arrêter le processus initial de Nginx de se terminer.
daemon off
ne soit pas approuvé par nginx .Pour développer la réponse de Charles Duffy, Nginx utilise la
daemon off
directive pour s'exécuter au premier plan. S'il n'est pas pratique de le mettre dans le fichier de configuration, nous pouvons le spécifier directement sur la ligne de commande. Cela facilite l'exécution en mode débogage (premier plan) et le passage direct en mode production (arrière-plan) en modifiant les arguments de la ligne de commande.Pour courir au premier plan:
Pour exécuter en arrière-plan:
la source
CMD
seraCMD ["nginx", "-g", "daemon off;"]
pour dockerPour développer la réponse de John, vous pouvez également utiliser la
Dockerfile
CMD
commande comme suit (au cas où vous voudriez qu'elle démarre automatiquement sans arguments supplémentaires)la source
L'ajout de cette commande à Dockerfile peut le désactiver:
la source
Juste pour info, à partir d'aujourd'hui (22 octobre 2019), les images officielles du docker Nginx ont toutes une ligne:
par exemple https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117
la source
Ici, vous avez un exemple de Dockerfile qui exécute nginx. Comme mentionné par Charles, il utilise la
daemon off
configuration:https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
la source
Pour ajouter les réponses de Tomer et Charles,
Syntaxe pour exécuter nginx dans forground dans le conteneur Docker à l'aide d'Entrypoint:
Pas directement lié mais pour exécuter plusieurs commandes avec Entrypoint:
la source
Il est également recommandé d'utiliser supervisord ou runit [1] pour la gestion des services.
[1] https://github.com/phusion/baseimage-docker
la source
Comme il n'y a pas de fichier Docker complet, voici mon ensemble
Dockerfile
résolution du problème.Agréable et fonctionne. Merci à toutes les réponses ici afin de résoudre le problème final de nginx.
Et exécutez-le avec:
la source