Зависимость от нескольких контейнеров Docker - PullRequest
0 голосов
/ 10 октября 2019

Я довольно новичок в докере.

Моя проблема в том, что у меня есть мультиконтейнерное приложение (zookeeper, kafka, производитель, потребитель), в котором я хочу запускать контейнеры производителя и потребителя только послеконтейнеры zookeeper и kafka запущены и работают. Как отредактировать файл docker-compose и добиться этого? Контейнеру kafka требуется около 15 секунд для настройки и создания темы, которую слушает потребитель. Я хочу запустить потребительский контейнер после создания темы, чтобы у меня уже был запущен брокер. Заранее спасибо.

Файл Docker-compose -

version: '3'

services:

  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - 2181:2181

  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - 9092:9092
    environment:
      - KAFKA_ADVERTISED_HOST_NAME=someserver
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
      - "KAFKA_CREATE_TOPICS=test:1:1"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  consumer:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: consumer
    depends_on:
            - kafka
            - zookeeper

Dockerfile -

FROM python

RUN pip install kafka-python

RUN pip install pandas
COPY . /src

CMD ["python", "/src/consumer.py"]

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Я думаю, что вы ищете, описано в документации . Однако передовой практикой для контейнеров является восстановление их соединений. Если вы не хотите этого делать, вы можете использовать простой сценарий оболочки, чтобы дождаться попытки подключения.

0 голосов
/ 10 октября 2019

Вы можете добавить блок проверки здоровья в определении сервиса kafka. См. Документацию на https://docs.docker.com/compose/compose-file/#healthcheck

...