Saltar al contenido

Mantenga el contenedor vivo y vinculado usando docker-compose

Este post fue analizado por nuestros especialistas para que tengas la garantía de la veracidad de este post.

Solución:

Entonces, docker-compose es solo un sustituto del cliente docker-engine. Mantiene la paridad de funciones con el cliente. Para diagnosticar problemas como este, debe abandonar el uso de docker-compose hasta que funcione con el cliente ole normal. Según sus comentarios aquí y en la otra respuesta, parece que no está ejecutando un contenedor con un proceso daemon en primer plano. Si desea ejecutar un shell interactivo en Docker, debe usar el -it banderas (-t asigna un tty y -i inicia una sesión interactiva). Si no ejecuta Docker con esos interruptores, su contenedor no sobrevivirá al iniciar un shell interactivo, por ejemplo php -a.

Ayuda pensar en Docker como una forma elegante de ejecutar un proceso y no como una máquina virtual. No es un “entorno” que existe fuera de la vida útil de cualquier proceso (y sus hijos) que esté ejecutando. Normalmente, PHP es invocado por algún servidor (por ejemplo, Apache, Nginx, etc.). Lo que está insinuando aquí es que necesita un proceso PHP para ejecutarse “permanentemente” para que pueda ingresar al contenedor y probar algunas cosas. Excepto por el shell interactivo, eso no será posible, y necesita usar específicamente el -it switch para mantener vivo un proceso de shell interactivo en su contenedor. La respuesta real aquí es que no puede hacer lo que está tratando de hacer aquí (mantener un contenedor PHP en ejecución) sin algún proceso de demonio/servidor relacionado escuchando en primer plano. La razón de esto es que no es así como funciona PHP. Si usted De Verdad desea ingresar a un contenedor desde su imagen PHP, simplemente colóquelo en un shell:

docker run -it apollo/php /bin/bash

… Y comenzará un contenedor desde su imagen PHP y obtendrá un caparazón en el contenedor (que morirá tan pronto como salga del caparazón). Pero nuevamente, solo reiterando desde mi primer párrafo, docker-compose no es el camino a seguir aquí.

Tenía un problema similar con la ejecución de un shell zsh en un contenedor docker que se ejecutaba con componer, se cerraría con el código de salida 0 inmediatamente después del inicio.

El comentario de @Spock debajo de la última respuesta es en realidad el keyal menos para lo que necesito.

Configure su comando docker-compose para que la imagen sea:

command: tail -f /dev/null

Esto mantiene vivo el proceso, pero también permite que se cierre correctamente.

si corres con docker-compose up y no hay errores impresos en la terminal, entonces sugiere que el servicio se detiene porque finalizó (en lugar de encontrar algún error).

Una posible causa de error es que está enviando cosas a PHP (instalando el compositor) que matará el terminal php interactivo que es disparado por el php:5.6-cli imagen. Para volver a iniciar el shell php interactivo, agregue lo siguiente al final de su Dockerfile:

CMD ["php", "-a"]

y vuelve a intentarlo con docker-compose up

Nota al margen: cuando todo funciona correctamente, puede ejecutar docker-compose up -d para ejecutarse en modo daemon, lo que le otorga el control de su terminal nuevamente (todo stdout + stderr se registrará dentro de los respectivos archivos de registro del contenedor docker).

Luego puede adjuntar al contenedor para hacer lo suyo. siempre encontré eso docker exec -it bash fue más rápido que docker attach

Espero que esto ayude.

Comentarios y valoraciones

Ten en cuenta comunicar este post si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *