Nginx acoplado no está comenzando
He intentado seguir algunos tutoriales y documentación sobre dockerizing mi servidor web, pero estoy teniendo problemas para que el servicio se ejecute a través del comando docker run.
Este es mi Dockerfile:
FROM ubuntu:trusty
#Update and install stuff
RUN apt-get update
RUN apt-get install -y python-software-properties aptitude screen htop nano nmap nginx
#Add files
ADD src/main/resources/ /usr/share/nginx/html
EXPOSE 80
CMD service nginx start
Creo mi imagen:
docker build -t myImage .
Y cuando lo ejecute:
docker run -p 81:80 myImage
Parece que simplemente se detiene:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90e54a254efa pms-gui:latest /bin/sh -c service n 3 seconds ago Exit 0 prickly_bohr
Esperaría que esto se ejecute con el puerto 81->80, pero no lo es. Corriendo
docker start 90e
No parece hacer nada.
También intenté entrando directamente
docker run -t -i -p 81:80 myImage /bin/bash
Y desde aquí puedo iniciar el servicio
service nginx start
Y desde otra pestaña puedo ver que está funcionando como estaba previsto (también en mi navegador):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
408237a5e10b myImage:latest /bin/bash 12 seconds ago Up 11 seconds 0.0.0.0:81->80/tcp mad_turing
Así que supongo que es algo que estoy haciendo mal con mi Dockerfile? Podría alguien ayudarme con esto, soy bastante nuevo en Docker. ¡Gracias!
SOLUCIÓN: Basado en la respuesta de Ivant encontré otra manera de iniciar nginx en primer plano. Mi Dockerfile CMD ahora se ve como:
CMD /usr/sbin/nginx -g "daemon off;"
4 answers
El contenedor Docker se ejecuta siempre que el comando que especifique con CMD
, ENTRTYPOINT
o a través de la línea de comandos se está ejecutando. En su caso, el comando service
termina de inmediato y todo el contenedor se apaga.
Una forma de solucionar esto es iniciar nginx directamente desde la línea de comandos (asegúrese de no ejecutarlo como un demonio).
Otra opción es crear un pequeño script que inicia el servicio y luego duerme para siempre. Algo como:
#!/bin/bash
service nginx start
while true; do sleep 1d; done
Y ejecute esto en lugar de ejecutando directamente el comando service
.
Una tercera opción sería usar algo como runit o un programa similar, en lugar del servicio normal.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-16 10:30:24
A partir de ahora, la imagen oficial de nginx usa esto para ejecutar nginx (ver el Dockerfile):
CMD ["nginx", "-g", "daemon off;"]
En mi caso, esto fue suficiente para que comenzara correctamente. Hay tutoriales en línea que sugieren formas más incómodas de lograr esto, pero lo anterior parece bastante limpio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-20 00:36:32
Usando docker-compose:
Para seguir la solución recomendada, agréguela a docker-compose.yml:
command: nginx -g "daemon off"
También encontré que simplemente podía agregar a nginx.conf:
daemon off;
...y seguir utilizando en docker-compose.yml:
command: service nginx start
...aunque haría el archivo de configuración menos portable fuera de docker.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-05 19:42:00
Docker como un muy buen índice de imágenes oficiales y de usuario. Cuando quieres hacer algo, es probable que alguien ya lo haya hecho;)
Simplemente busque 'nginx' en index.docker.io, verás, hay una imagen oficial de nginx: https://registry.hub.docker.com/_/nginx /
Allí tienes una guía completa para ayudarte a iniciar tu servidor web.
No dude en echar un vistazo a otros usuarios nginx imagen para ver variantes:)
La idea es iniciar nginx en primer plano modo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-16 21:59:38