Как автоматически перезапустить контейнер, если другой контейнер воссоздан в docker-compose? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть два контейнера: A и B.Контейнер B необходимо перезапускать каждый раз, когда контейнер A создается заново, чтобы получить новый контейнер id.

Как это можно сделать без взлома?

1 Ответ

0 голосов
/ 18 октября 2018

Не то, что я пытался сделать раньше, но ... демон Docker генерирует события, когда происходят определенные вещи.Вы можете увидеть некоторые из них в https://docs.docker.com/engine/reference/commandline/events/#parent-command, но, например:

Контейнеры Docker сообщают о следующих событиях:

присоединить коммит копию создать уничтожить отсоединить exec_create exec_detach exec_startэкспорт health_status kill oom pause переименовать resize перезапустить start stop top top unpause update

По умолчанию на одном хосте докера вы можете общаться с демоном через сокет unix /var/run/docker.sock.Вы также можете связать этот сокет Unix с контейнером, чтобы вы могли перехватывать события внутри контейнера.Вот простой docker-compose.yml, который делает это:

version: '3.2'

services:

  container_a:
    image: nginx
    container_name: container_a

  container_b:
    image: docker
    container_name: container_b
    command: docker events
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

Запустите этот стек с docker-compose up -d.Затем в одном терминале запустите docker logs -f container_b.В другом терминале запустите docker restart container_a, и вы увидите некоторые события в окне журнала, которые показывают перезапуск контейнера.Ваше приложение может перехватить эти события, используя клиентскую библиотеку Docker, а затем либо завершить себя и дождаться перезапуска, либо каким-либо иным образом организовать перезапуск или реконфигурацию.

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

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