Docker Compose Подождите, пока контейнер зависимостей полностью запустится перед запуском - PullRequest
4 голосов
/ 03 апреля 2019

Я работаю со службой Docker, используя docker-compose, и у меня есть служба, которая зависит от другого.

Я использовал клавишу depends_on, но служба с зависимостью запускается до полного запуска зависимой службы.

version: '3'

services:
  KeyManager:
    image: cjrutherford/keymanager
    deploy:
      replicas: 1
    ports:
      - '3220:3220'
    networks:
      - privnet
  YellowDiamond:
    image: cjrutherford/server
    depends_on:
      - KeyManager
    deploy:
      replicas: 1
    ports:
      - '3000:3000'
    networks:
      - privnet
      - web
networks:
  privnet:
    internal: true
  web:

Оба эти приложения являются узлами, и диспетчер ключей должен быть запущен для приема запросов до запуска сервера. Могу ли я добавить тайм-аут? или отправить триггер в приложении? просто слишком рано, чтобы получить ключ от менеджера.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Я часто обнаруживал, что использование bash-скрипта wait-for-it гораздо более эффективно, чем встроенная проверка работоспособности для docker-compose.

Это запускает проверку работоспособности TCP для данного порта и ждет, пока это не будет завершено, прежде чем запускать процесс.

Пример кода:

version: "2"
services:
  web:
    build: .
    ports:
      - "80:8000"
    depends_on:
      - "db"
    command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
  db:
    image: postgres

Вот несколько документов:

1 голос
/ 03 апреля 2019

Вы, вероятно, ищете docker compose healthcheck

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U postgres"]
  interval: 10s
  timeout: 5s
  retries: 5

Здесь также есть хорошая ссылка:
https://github.com/peter-evans/docker-compose-healthcheck

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