Проблема
Как заставить docker-compose up
выйти с ошибкой, если любой его сервис/контейнер завершается с ошибкой? Существует флаг --abort-on-container-exit
, но он всегда завершается с кодом выхода 0
. Существует также аргумент --exit-code-from <my_service>
, но он завершится только с кодом выхода, с которым был завершен <my_service>
.
Альтернативная форма того же вопроса: как узнать, что какой-либо контейнер докеров, запущенный предыдущей командой docker-compose up
, завершился с ошибкой?
Нестандартное решение
Я придумал одно решение, в котором вы отслеживаете stdout
, заданное docker-compose
, и выполняете grep для экземпляров строки <service> exited with error code <code>
, но я думаю, что этот подход подвержен ложным срабатываниям, а также вводит внешнюю зависимость. Мне интересно, есть ли лучший способ.
Большое спасибо за ваш ответ @Raphael! Я пытаюсь что-то написать. В частности, я использую docker-compose для выполнения тестов в среде CI. Я хочу провалить задание тестирования CI, если какой-либо контейнер завершится с ошибкой. Мне нравится, как вы упомянули
docker ps --filter
. Я потенциально мог бы использовать это и проанализировать коды выхода, но я думаю, чтоdocker ps --filter
перечисляет все мертвые/вышедшие контейнеры докеров, а не только те, которые были из самого последнего выполненияdocker-compose
.