Agregue un cheque en la parte superior de su script de Entrypoint
Docker realmente necesita implementar esto como una nueva característica, pero aquí hay otra opción alternativa para situaciones en las que tiene un Punto de entrada que finaliza después del éxito o el fracaso, lo que puede dificultar la depuración.
Si aún no tiene un script de Entrypoint, cree uno que ejecute los comandos que necesite para su contenedor. Luego, en la parte superior de este archivo, agregue estas líneas a entrypoint.sh
:
# Run once, hold otherwise
if [ -f "already_ran" ]; then
echo "Already ran the Entrypoint once. Holding indefinitely for debugging."
cat
fi
touch already_ran
# Do your main things down here
Para asegurarse de que se cat
mantiene la conexión, es posible que deba proporcionar un TTY. Estoy ejecutando el contenedor con mi script de Entrypoint de esta manera:
docker run -t --entrypoint entrypoint.sh image_name
Esto hará que el script se ejecute una vez, creando un archivo que indica que ya se ha ejecutado (en el sistema de archivos virtual del contenedor). Luego puede reiniciar el contenedor para realizar la depuración:
docker start container_name
Cuando reinicie el contenedor, se encontrará el already_ran
archivo, lo que provocará que el script de Entrypoint se detenga cat
(que solo espera para siempre la entrada que nunca llegará, pero mantiene vivo el contenedor). Luego puede ejecutar una bash
sesión de depuración :
docker exec -i container_name bash
Mientras se ejecuta el contenedor, también puede eliminar already_ran
y ejecutar manualmente el entrypoint.sh
script para volver a ejecutarlo, si necesita depurar de esa manera.