start run remove images container bash docker

bash - run - docker start image



¿Cómo detectar si Docker Run tuvo éxito programáticamente? (3)

Para evitar analizar nada, puede usar la parte superior de la ventana acoplable , que devuelve 1 si el contenedor no se está ejecutando:

id=$(docker run mycontainer) if ! docker top $id &>/dev/null then echo "Container crashed unexpectedly..." return 1 fi

Estoy escribiendo un guión bash muy simple para verificar rápidamente que mi contenedor aún se construya y comience correctamente y que la aplicación en el interior responda a las solicitudes.

A veces, la docker run falla, por ejemplo, porque el puerto al que intento vincular el contenedor ya está asignado. Pero cuando esto sucede, el código de salida de docker run sigue siendo 0, por lo que no puedo usar el código de salida. ¿Cómo puedo verificar programáticamente que el contenedor se inició correctamente?

Las soluciones que estoy considerando son:

  • analizar el resultado de errores
  • docker ps para ver si el contenedor se está ejecutando

pero estos dos parecen un poco exagerados y feos. ¿Me está perdiendo una mejor manera de verificar si la docker run ?


Podríamos usar docker exec $id true 2>/dev/null || echo not running docker exec $id true 2>/dev/null || echo not running .

Este comando no escribe en stdout, como lo hace "docker top". Escribe en stderr cuando el contenedor no se está ejecutando, el mismo mensaje que "docker top".


Según lo sugerido por Abel Muiño en los comentarios, esto puede haberse solucionado en las versiones más recientes de Docker (actualmente estoy ejecutando 0.9.1).

Pero, si estás atascado temporalmente como yo con una versión anterior, encontré una solución decente para verificar si el contenedor comenzó utilizando docker inspect .

docker inspect devuelve un objeto JSON con mucha información sobre el contenedor y, en particular, si el contenedor se está ejecutando actualmente o no. El indicador -f permite extraer fácilmente los bits necesarios:

docker inspect -f {{.State.Running}} $CONTAINER_ID

devolverá true o false .

Tenga en cuenta que probablemente desee sleep 1 (o más) entre iniciar el contenedor y verificar si está activo. Si hay algún problema con la configuración, es posible que aparezca como "en funcionamiento" durante un tiempo muy corto antes de salir realmente.