Tengo Nginx instalado en un contenedor Docker, y estoy tratando de ejecutarlo así:
docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx
El problema es que la forma en que funciona Nginx es que el proceso inicial genera inmediatamente un proceso maestro de Nginx y algunos trabajadores, y luego se cierra. Como Docker solo está mirando el PID del comando original, el contenedor se detiene.
¿Cómo evito que el contenedor se detenga? Necesito poder decirle que se una al primer proceso secundario, o que detenga la salida del proceso inicial de Nginx.
daemon off
no esté respaldado por nginx .Para ampliar la respuesta de Charles Duffy, Nginx usa el
daemon off
directiva para ejecutar en primer plano. Si no es conveniente poner esto en el archivo de configuración, podemos especificarlo directamente en la línea de comando. Esto facilita la ejecución en modo de depuración (primer plano) y cambia directamente a la ejecución en modo de producción (fondo) cambiando los argumentos de la línea de comandos.Para ejecutar en primer plano:
Para ejecutar en segundo plano:
fuente
CMD
seráCMD ["nginx", "-g", "daemon off;"]
paraPara ampliar la respuesta de John, también puede usar el
Dockerfile
CMD
comando de la siguiente manera (en caso de que desee que se inicie automáticamente sin argumentos adicionales)fuente
Agregar este comando a Dockerfile puede deshabilitarlo:
fuente
Solo para su información, a partir de hoy (22 de octubre de 2019) las imágenes oficiales de Docker de Nginx tienen línea:
por ejemplo, https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117
fuente
Aquí tiene un ejemplo de un Dockerfile que ejecuta nginx. Como mencionó Charles, usa la
daemon off
configuración:https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
fuente
Para agregar las respuestas de Tomer y Charles,
Sintaxis para ejecutar nginx en primer plano en el contenedor Docker usando Entrypoint:
No está directamente relacionado, pero para ejecutar varios comandos con Entrypoint:
fuente
También es una buena idea utilizar supervisor o runit [1] para la gestión del servicio.
[1] https://github.com/phusion/baseimage-docker
fuente
Como no hay todo el Dockerfile, aquí está todo mi
Dockerfile
resolver el problema.Agradable y trabajando. Gracias a todas las respuestas aquí para resolver el problema final de nginx.
Y ejecútalo con:
fuente