Saltar al contenido

Mantenga el contenedor activo y vinculado mediante docker-compose

Solución:

Entonces, docker-compose es solo un sustituto del cliente del motor de docker. Mantiene la paridad de características con el cliente. Para diagnosticar problemas como este, debe dejar de usar docker-compose hasta que lo haga funcionar 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 de demonio 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 conmutadores, su contenedor no sobrevivirá al iniciar un shell interactivo, por ejemplo php -a.

Es útil 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 entrar en el contenedor y probar algunas cosas. Excepto por el shell interactivo, eso no será posible, y debe usar específicamente el -it cambie 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 PHP no funciona así. Si tu 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 shell en el contenedor (que morirá tan pronto como salga del shell). Pero nuevamente, solo reiterando desde mi primer párrafo, docker-compose no es el camino a seguir aquí.

Tenía un problema similar al ejecutar un shell zsh en un contenedor docker que se ejecutaba con compose, 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 la clave, al 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 el terminal, entonces sugiere que el servicio se está deteniendo porque está terminado (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 iniciar nuevamente 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, puedes ejecutar docker-compose up -d para que se ejecute en modo demonio, lo que le permite volver a controlar su terminal (todos los stdout + stderr se registrarán en los respectivos archivos de registro del contenedor de la ventana acoplable).

Luego puede adjuntarlo al contenedor para hacer lo suyo. Siempre encontré eso docker exec -it <containerID> bash fue más rápido que docker attach <container id>

Espero que esto ayude.

¡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 *