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

У меня есть контейнер A, который зависит от данных, загружаемых контейнером B.

Чтобы реализовать эту зависимость, я попытался использовать зависящий от_on в docker-compose, и хотя он гарантирует, что контейнер B запускается до A, загрузка можетвсе еще в процессе.

Есть ли способ указать условие в точке входа контейнера A, что оно должно ждать до завершения загрузки контейнером B?

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Это в основном зависит от среды выполнения.

Kubernetes : Если это Kubernetes, вам повезло, что вы описываете в основном init контейнер . Модуль в Kubernetes может иметь несколько контейнеров и контейнеров init, запущенных до завершения до запуска основного контейнера (ов) приложения. Вот какова последняя версия документации:

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

Docker Compose : Тебе не так повезло. Как говорится в вашем вопросе, depends_on просто означает, что один контейнер запускается раньше другого, а не то, что завершает до запуска другого. Если вы хотите добиться этого, вам нужно будет ввести логику в себя.

В этом случае я бы попросил контейнер загрузки загрузить все, что вы хотите, а затем написать в известное место.

например. в сценарии точки входа контейнера загрузки:

#!/bin/bash
curl -o /path/to/my/download http://example.com/download/path
touch /some/shared/file

и в точке входа основного контейнера:

#!/bin/bash
while [ ! -f /some/shared/file ]; do
# endless loop
done

# now perform your normal start

Предполагается, что и /path/to/my/download, и /some/shared/file доступны из обоих контейнеров, либо через монтирование тома, либо через общий контейнер данных (и, в частности, /some/shared/file должно отображаться в одном и том же месте в обоих контейнерах).

1 голос
/ 17 июня 2019

Я бы предложил внести изменения в точку входа containerA.

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

в контейнере B после завершения операции загрузки.Создайте событие, которое будет отмечать завершение этого процесса, например, прикосновение к файлу /path/xyz.txt

. В сценарии точки входа containerA будет продолжаться проверка на наличие файла /path/xyz.txt, и если он существует,это будет продолжаться дальше.

...