Se você assumir este cenário:
Os contêineres - iniciam e são executados indefinidamente ou param imediatamente com um código de erro (por exemplo, para configurações ausentes)
- você faz a verificação apenas uma vez depois que o docker compõe up -d retorna
você pode verificar se há algum contêiner parado devido a um erro com:
docker ps -a | grep 'Exited (255)'
.
Essa verificação funciona corretamente, mesmo no caso de contêineres que devem ser interrompidos imediatamente sem erros (ou seja, contêineres de dados), pois seu status (de docker ps -a
) é marcado como Exited (0)
.
Por exemplo, em nosso docker-compose.yml, iniciamos nossos contêineres com:
command: sh -c 'node dotenv_check.js && pm2 start --no-daemon src/worker.js --watch'
Para o php-fpm, usamos um comando semelhante:
command: >-
sh -c '
set -e;
for PROJECT in frontend backend; do
cd /var/www/$${PROJECT};
php dotenv_check.php;
done;
php-fpm
'
Os dotenv_check.js
e dotenv_check.php
são scripts que saem com um código de erro no caso de uma variável env requerida estar ausente.
O comando set -e
, instrui o script a interromper o erro, que, por sua vez, interromperá imediatamente o contêiner. Sobre o set-e