Порядок того, как сервисы начинают «подниматься» в Docker - (ожидание, пока один сервис полностью заработает, прежде чем поднять другой) - PullRequest
0 голосов
/ 12 апреля 2019

У меня проблема с заказом моих сервисов Docker с точки зрения их настройки. Фактически у меня есть пять служб: api (приложение Django Rest Framework), db (база данных PostgreSQL) ,asticsearch (служба Elasticsearch), Kibana и APM для ведения журнала.

По сути, мне нужно, чтобы Elasticsearch был запущен до того, как служба apm сможет начать делать свое дело, но порядок таков, что Elasticsearch нужно завершить до того, как APM и Kibana смогут начать делать то же самое.

Вот мой docker-compose.yml файл и все соответствующие зависимости:

version: "3"

services:
  api:
    build:
      context: api
    command: python3 manage.py runserver 0.0.0.0:8000
    env_file: api/.env
    volumes:
      - ./api:/usr/src/app
    ports:
      - 8000:8000
      - 6900:6900
    depends_on:
      - db

  db:
    build: docker/db
    environment:
      - POSTGRES_DB=************
      - POSTGRES_USER=dbaccount
      - POSTGRES_PASSWORD=dbpassword
    ports:
      - 5432:5432

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - cluster.routing.allocation.disk.threshold_enabled=false

  kibana:
    image: docker.elastic.co/kibana/kibana:6.5.1
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch
  apm:
    image: docker.elastic.co/apm/apm-server:6.5.1
    volumes:
      - ./docker/apm/apm-server.yml:/usr/share/apm-server/apm-server.yml
    depends_on:
      - elasticsearch
    ports:
      - 8200:8200

Фактически, порядок выполнения вызывает общий код завершения chroot для Linux «1» в службе APM и требует ручного «docker-compose apm restart» для начала работы ...

Есть ли способ подождать, пока один сервис полностью "включится", прежде чем "поднять" другой?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Здесь есть тема на github:

https://github.com/moby/moby/issues/30404#issuecomment-274825244

и здесь

https://github.com/docker/compose/issues/4305

Если вы хотите использовать проверку работоспособности для docker-compose, я предлагаю вам использовать v2.1, так как это единственная версия, поддерживающая это. Однако, как объяснено в ответах выше, эта функциональность была удалена для облегчения перехода от внешнего docker-compose:

https://github.com/docker/compose/issues/4305#issuecomment-276527457

0 голосов
/ 12 апреля 2019

Как объяснено в документации docker-compose: https://docs.docker.com/compose/startup-order/

В docker или compose нет способа узнать, когда контейнер полностью "готов", перед запуском их зависимостей, что должно обрабатываться каждым приложением.

Существует обходной путь, который показан в документации с помощью сценария ожидания этого: https://github.com/vishnubob/wait-for-it

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...