Какова альтернатива условной форме в 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