¿Cómo mantener el contenedor Docker en ejecución después de iniciar los servicios?

Resuelto Eli asked hace 10 años • 15 respuestas

He visto muchos tutoriales que parecen hacer lo mismo que yo intento hacer, pero por alguna razón mis contenedores Docker salen. Básicamente, estoy configurando un servidor web y algunos demonios dentro de un contenedor Docker. Hago las partes finales de esto a través de un script bash llamado run-all.shque ejecuto a través de CMD en mi Dockerfile. run-all.shSe ve como esto:

service supervisor start
service nginx start

Y lo inicio dentro de mi Dockerfile de la siguiente manera:

CMD ["sh", "/root/credentialize_and_run.sh"]

Puedo ver que todos los servicios se inician correctamente cuando ejecuto las cosas manualmente (es decir, accedo a la imagen con -i -t /bin/bash), y todo parece funcionar correctamente cuando ejecuto la imagen, pero sale una vez. termina de iniciar mis procesos. Me gustaría que los procesos se ejecuten indefinidamente y, hasta donde tengo entendido, el contenedor debe seguir ejecutándose para que esto suceda. Sin embargo, cuando ejecuto docker ps -a, veo:

➜  docker_test  docker ps -a
CONTAINER ID        IMAGE                            COMMAND                CREATED             STATUS                      PORTS               NAMES
c7706edc4189        some_name/some_repo:blah   "sh /root/run-all.sh   8 minutes ago       Exited (0) 8 minutes ago                        grave_jones

¿Lo que da? ¿Por qué sale? Sé que podría poner un bucle while al final de mi script bash para mantenerlo, pero ¿cuál es la forma correcta de evitar que salga?

Eli avatar Sep 11 '14 04:09 Eli
Aceptado

Si está utilizando un Dockerfile, intente:

ENTRYPOINT ["tail", "-f", "/dev/null"]

(Obviamente, esto es solo para fines de desarrollo, no debería necesitar mantener activo un contenedor a menos que esté ejecutando un proceso, por ejemplo, nginx...)

Soft Bullets avatar Mar 18 '2017 11:03 Soft Bullets

Tuve el mismo problema y descubrí que si ejecuta su contenedor con la bandera -ty -d, continúa ejecutándose.

docker run -td <image>

Esto es lo que hacen las banderas (según docker run --help):

-d, --detach=false         Run container in background and print container ID
-t, --tty=false            Allocate a pseudo-TTY

El más importante es la -tbandera. -dsolo te permite ejecutar el contenedor en segundo plano.

arne.z avatar Apr 26 '2016 17:04 arne.z