Estoy usando el docker-compose
.
Algunos comandos tienen gusto up -d service_name
o start service_name
están regresando de inmediato y esto es bastante útil si no desea que los contenedores en ejecución dependan del estado del shell, como lo hacen con regular up service_name
. El único caso de uso lo ejecuta desde algún tipo de servidor continuo de integración / entrega.
Pero esta forma de ejecutar / iniciar servicios no proporciona ningún comentario sobre el estado real del servicio posterior.
La referencia de Docker Compose CLI para el up
comando menciona la opción relevante, pero, en cuanto a la versión 1.7.1
, es mutuamente exclusiva con -d
:
--abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.*
¿De alguna manera puedo verificar manualmente que el contenedor realmente funciona y no se ha detenido debido a algún error?
fuente
docker ps -q -f "status=running" --no-trunc | grep $(docker-compose ps -q <service_name>)
grep ....
parte termina con una cadena vacía.if [ -z `docker-compose ps -q mysql` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q mysql)` ]; then
. Lo que esto hace es: primero verifica si el servicio existe (incluso si está detenido) y la segunda parte verifica si el servicio existente se está ejecutando realmente. Es posible que desee incluir esto en su ejemplo para futuros lectores que solo lean la respuesta aceptada. Pienso que es útil.En cuanto a la versión
1.7.1
, no hay tales comandos incorporados.En cambio,
exec
se puede usar de manera similar.Cuando lo ejecute para el servicio que tiene algunos contenedores, se ejecutará correctamente:
Pero cuando lo ejecuta para el servicio que no tiene contenedores de servicio en ejecución , mostrará un error:
Por lo tanto, se puede utilizar para verificar si hay algún contenedor "vivo" para un servicio dado.
fuente
Tu puedes correr:
Y obtendrá la identificación del contenedor si se
service-name
está ejecutando. Algo como:Si el servicio no se está ejecutando, la salida está vacía, por lo que si desea usar esto en un script, puede hacer algo como:
fuente
docker-compose up
luego Ctrl-C.docker-compose ps
entonces debería mostrar que los estados del contenedor no están "arriba", perodocker-compose ps -q service-name
aún así le da una identificación.Tenía una necesidad similar Sin embargo, tengo un
restart: always
en mi entorno. Por lo tanto, puede ser un poco complicado detectar si algo falla y se reinicia en un bucle.Hice una comprobación de Icinga / Nagios para comparar también los tiempos creados y de inicio. Tal vez sea útil para alguien más en el futuro:
fuente
Si asume este escenario:
se puede comprobar si hay algún recipiente detenido debido a un error con:
docker ps -a | grep 'Exited (255)'
.Esta comprobación funciona correctamente incluso en el caso de contenedores que se espera que se detengan inmediatamente sin error (es decir, contenedores de datos), ya que su estado (desde
docker ps -a
) está marcado comoExited (0)
.Por ejemplo, en nuestro docker-compose.yml, comenzamos nuestros contenedores con:
command: sh -c 'node dotenv_check.js && pm2 start --no-daemon src/worker.js --watch'
Para php-fpm, usamos un comando similar:
Los
dotenv_check.js
ydotenv_check.php
son scripts que salen con un código de error en caso de que falte una variable env requerida.El
set -e
comando le dice al script que se detenga en caso de error, lo que, a su vez, detendrá inmediatamente el contenedor. Sobre set-efuente
¿Qué tal esto?
enumera los procesos, selecciona las líneas donde está "Arriba" en la columna 4 y filtra para encontrar una coincidencia en el nombre del servicio.
fuente