¿Cómo ejecutar Nginx dentro de un contenedor Docker sin detenerse?

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 process inicial genera de inmediato un process maestro de Nginx y algunos trabajadores, y luego se cierra. Como Docker solo está mirando el PID del command original, el contenedor se detiene.

¿Cómo evito que el contenedor se detenga? Necesito poder decirle que se vincule al primer process hijo, o detener el process inicial de Nginx.

nginx , como todos los progtwigs de buen comportamiento, se puede configurar para no autodefectarse.

Use la directiva de configuration de daemon off descrita en http://wiki.nginx.org/CoreModule .

Para ampliar la respuesta de Charles Duffy, Nginx usa la directiva daemon off para correr en primer plano. Si no es conveniente colocar esto en el file de configuration, podemos especificarlo directamente en la línea de command. Esto facilita la ejecución en modo de debugging (primer plano) y cambia directamente a la ejecución en modo de producción (background) cambiando los arguments de línea de command.

Para ejecutar en primer plano:

 nginx -g 'daemon off;' 

Para ejecutar en segundo plano:

 nginx 

Para ampliar la respuesta de John, también puede usar el command Dockerfile CMD siguiente manera (en caso de que desee que se inicie automáticamente sin arguments adicionales)

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

Aquí tiene un ejemplo de un file Docker que ejecuta nginx. Como lo menciona Charles, usa la configuration de daemon off :

https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17

Agregar este command a Dockerfile puede deshabilitarlo:

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

También es una buena idea usar supervisord o runit [1] para la administración del service.

[1] https://github.com/phusion/baseimage-docker