Это в основном зависит от среды выполнения.
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
должно отображаться в одном и том же месте в обоих контейнерах).