Запустить Docker-контейнер после выхода из другого контейнера. - PullRequest
0 голосов
/ 03 июля 2018

У меня следующий файл docker-compose

version: '3'
services:
  serviceA:
    image: my/serviceA
    container_name: serviceA
  serviceB:
    image: my/serviceB
    container_name: serviceB

Я хочу запустить контейнер serviceB после выхода из контейнера serviceA. Есть ли способ дождаться выхода serviceA и затем запустить контейнер serviceB?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы могли бы потенциально настроить скрипт во втором контейнере для проверки связи с первым, немного похоже на https://docs.docker.com/compose/startup-order/, но проверяя, что контейнер выключен, а не вверх.

Однако из опыта это немного подвержено ошибкам. Я предпочитаю запускать docker-compose дважды. Предполагая, что первый контейнер завершает работу после выполнения команды, вы можете запустить serviceA без флага демона -d, а затем запустить serviceB

docker-compose up serviceA
docker-compose up -d serviceB

Вы можете поместить эти команды в сценарий, если это полезно.

0 голосов
/ 03 июля 2018

Docker Compose не поддерживает это.

Существует более или менее стандартный трюк для службы B, ожидающей, пока служба A не начнет запуск . Если у одной службы есть способ увидеть другую (например, служба A выполняет сетевую службу, видимую в частной сети Docker), тогда служба B может ожидать запуска A, затем ждать остановки B и выполнять свою работу. , Однако вы не сможете увидеть, успешно ли вышел A.

Если вам удобно предоставлять сервису B потенциально неограниченный root-доступ на хосте, вы можете смонтировать сокет Docker в его контейнер, а затем он сможет ожидать выхода из сервиса A. Возможно, было бы чище направить какую-то службу оркестровщика C, которая запустила A, увидела, что она выходит, а затем запустила B.

(Если вы были в Kubernetes, у него есть pre-stop hook , который может запустить скрипт в сервисе A до его выхода, но это довольно тяжелый ответ.)

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