linux - que - ejecutar contenedor docker
¿Cómo ejecutar Nginx dentro de un contenedor Docker sin detenerse? (6)
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 de inmediato 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 vincule al primer proceso hijo, o detener el proceso inicial de Nginx.
Agregar este comando a Dockerfile puede deshabilitarlo:
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
Aquí tiene un ejemplo de un archivo Docker que ejecuta nginx. Como lo menciona Charles, usa la configuración de daemon off
:
https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
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 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 línea de comando.
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 comando Dockerfile
CMD
siguiente manera (en caso de que desee que se inicie automáticamente sin argumentos adicionales)
CMD ["nginx", "-g", "daemon off;"]
También es una buena idea usar supervisord o runit [1] para la administración del servicio.
nginx
, como todos los programas de buen comportamiento, se puede configurar para no autodefectarse.
Use la directiva de configuración de daemon off
descrita en http://wiki.nginx.org/CoreModule .