A veces hay que investigar un contenedor, que se detiene, o un contenedor que después de arrancar muere muy rápido y se detiene.
docker exec -ti <id> bash solo funciona en contenedores en ejecución, una vez que finaliza, el indicador de bash también finaliza.
Con docker startusted no puede proporcionar un comando diferente, y si el contenedor vuelve a morir abruptamente, no tendrá tiempo suficiente para entrar en el contenedor e investigar.
Podemos hacerlo docker commit, luego docker runen la nueva imagen con un comando diferente, pero me pregunto si hay otras alternativas.
Nota : docker logssolo devuelve las aplicaciones impresas en stdout / stderr. Eso podría no ser suficiente para descubrir cuál era el problema.
docker
containers
post-mortem
SztupY
fuente
fuente

Respuestas:
Las formas generales de rastrear por qué falló un proceso en Linux son buenas. Una de estas formas es ejecutar un proceso
straceque le dirá qué hizo el proceso de llamadas del sistema y, por lo general, le indicará el motivo de la falla.Puede crear una
Dockerfileque se vea así:Luego ejecuta tu nueva imagen usando
docker run debug_version strace original_cmd.Para los procesos que bifurcan a los hijos (y luego mueren) que desea ejecutar
stracecon la-ffopción. También puede asignar algún archivo utilizando los volúmenes de datos de Docker y usar la-oopción destracepara escribir en él. Pero en generalstracedejará la salida en stdout, que se puede leer usandodocker log.P relacionada : el proceso de Linux termina misteriosamente
fuente
docker commitmi contenedor detenido primero en tener una imagen a partir destraceAlpine Linux, pkgs.alpinelinux.org/package/edge/main/x86_64/strace . Utilice el gestor de paquetes Alpine para instalarlo,apk install strace.Hasta donde yo sé,
commityrunson las mejores opciones aquí para darle acceso completo al contenedor como estaba cuando murió.Idealmente, su contenedor escupiría información más útil cuando falla, pero ese es otro tema completamente diferente.
Editar: para expandir mi respuesta, si el contenedor se está muriendo en el inicio, también puede usar
docker runpara especificar una alternativa--entrypointyCMD. En general, configuraré esto en un bucle o algo que no salga solo. Una vez que esté en el contenedor, puede ejecutar manualmente los pasos que están fallando y luego inspeccionar el resultado sin tener que preocuparse por la salida del contenedor.fuente