Я использую docker-compose
.
Некоторые команды, такие как up -d service_name
или start service_name
возвращаются сразу же, и это очень полезно, если вы не хотите, чтобы запущенные контейнеры зависели от состояния оболочки, как это происходит с обычной up service_name
. Один вариант использования запускает его с какого-то сервера непрерывной интеграции / доставки.
Но этот способ запуска / запуска служб не дает обратной связи о фактическом состоянии службы впоследствии.
Ссылка Docker Compose CLI для up
команды упоминает соответствующий вариант, но, как и для версии 1.7.1
, это взаимоисключающие -d
:
--abort-on-container-exit Stops all containers if any container was stopped. *Incompatible with -d.*
Можно ли как-то вручную проверить, что контейнер действительно работает и не остановился из-за какой-то ошибки?
источник
docker ps -q -f "status=running" --no-trunc | grep $(docker-compose ps -q <service_name>)
grep ....
часть заканчивается пустой строкой.if [ -z `docker-compose ps -q mysql` ] || [ -z `docker ps -q --no-trunc | grep $(docker-compose ps -q mysql)` ]; then
. Это делает следующее: сначала проверяется, существует ли служба вообще (даже если она остановлена), а вторая часть проверяет, действительно ли запущена существующая служба. Возможно, вы захотите включить это в свой пример для будущих читателей, которые смотрят только на принятый ответ. Я думаю, что это полезно.Что касается версии
1.7.1
, таких команд нет.Вместо этого
exec
можно использовать аналогичным образом.Когда вы запустите его для службы, которая имеет несколько контейнеров, она будет работать нормально:
Но когда вы запустите его для службы, у которой нет запущенных служебных контейнеров, она выдаст ошибку:
Таким образом, его можно использовать для проверки наличия «живых» контейнеров для данной услуги.
источник
Вы можете запустить:
И вы получите идентификатор контейнера, если
service-name
он работает. Что-то типа:Если служба не работает, выходные данные пусты, поэтому, если вы хотите использовать это в скрипте, вы можете сделать что-то вроде:
источник
docker-compose up
тогда Ctrl-C.docker-compose ps
Затем следует показать, что состояния контейнера не «вверх», ноdocker-compose ps -q service-name
все равно дает вам идентификатор.У меня была похожая потребность. Тем не менее, у меня есть
restart: always
в моей среде. Так что может быть немного сложно определить, происходит ли сбой и перезапуск в цикле.Я сделал проверку Icinga / Nagios, чтобы сравнить время создания и запуска. Может быть, это будет полезно для кого-то еще по линии:
источник
Если вы предполагаете этот сценарий:
Вы можете проверить, есть ли какой - либо остановленный контейнер из - за ошибки с:
docker ps -a | grep 'Exited (255)'
.Эта проверка работает правильно даже в случае контейнеров, которые, как ожидается, будут немедленно остановлены без ошибок (например, контейнеры данных), так как их статус (с
docker ps -a
) помечен какExited (0)
.Например, в нашем docker-compose.yml мы запускаем наши контейнеры с:
command: sh -c 'node dotenv_check.js && pm2 start --no-daemon src/worker.js --watch'
Для php-fpm мы используем похожую команду:
dotenv_check.js
Иdotenv_check.php
скрипты, выход с кодом ошибки в случае необходимости переменная окр отсутствует.Команда
set -e
указывает сценарию остановиться при ошибке, которая, в свою очередь, немедленно остановит контейнер. О сет-еисточник
Как насчет этого?
Вы перечисляете процессы, выбираете строки, в которых «Вверх» находится в столбце 4, и фильтруете совпадения по имени службы.
источник