Какова альтернатива условной форме в docker-compose версии 3?
docker-compose 2.1 предлагает приятную функцию для указания condition
с depends_on
. Текущая документация docker-compose гласит:
версия 3 больше не поддерживает форму условия depends_on.
к сожалению документация не объясняет, почему condition
форма была удалена и отсутствует какая-либо конкретная рекомендация о том, как реализовать это поведение с помощью V3 вверх.
2 ответов
произошел переход от указания зависимостей контейнера в compose. Они действительны только во время запуска и не работают при перезапуске зависимых контейнеров во время выполнения. Вместо этого каждый контейнер должен включать механизм повторной попытки подключения к зависимым службам при удалении соединения. Многие библиотеки для подключения к базам данных или службам REST API имеют настраиваемые встроенные повторы. Я бы этим занялся. Это необходимо для производственного кода в любом случае.
есть какие-то внешние инструменты, которые позволяют имитировать это поведение. Например, с помощью dockerize инструмент вы можете обернуть свой CMD
или ENTRYPOINT
С dockerize -wait
и что помешает выполнение приложения до указанной службы готовы.
если ваш файл docker-compose выглядел так:
version: '2.1'
services:
kafka:
image: spotify/kafka
healthcheck:
test: nc -z localhost 9092
webapp:
image: foo/bar # your image
healthcheck:
test: curl -f http://localhost:8080
tests:
image: bar/foo # your image
command: YOUR_TEST_COMMAND
depends_on:
kafka:
condition: service_healthy
webapp:
condition: service_healthy
затем вы можете использовать dockerize
в своем v3
создать файл следующим образом:
version: '3.0'
services:
kafka:
image: spotify/kafka
webapp:
image: foo/bar # your image
tests:
image: bar/foo # your image
command: dockerize -wait tcp://kafka:9092 -wait web://webapp:8080 YOUR_TEST_COMMAND