Я пытаюсь развернуть 3 контейнера Докера, имея отношение зависимости среди них (-> B-> C). Теперь, каждый контейнер, как предполагается, выполняет экземпляр Akka-брызг сверху экземпляра JVM.
Проблема: после обычных подходов оркестровки был запущен контейнер A, но веб-сервер не имел времени для начальной загрузки. Если это не в порядке перед контейнером B является операционным, контейнер B никогда не будет нагонять и т.д с C.
Я пробовал следующий подход в последнее время: совместно используйте объем данных между контейнерами; после того, как веб-сервер готов, сценарий помощника создаст пустой файл в объеме; запустите скрипт (через Новомодный сервис), который ищет пустой файл для разоблачения и разжигает следующий контейнер.
Однако использование сервиса наиболее вероятно причина к этой проблеме: выполнение
sudo docker run -d -it --name=backend -v ~/docker-test/:/docker-test -v ~/aux/:/aux ubuntu /bin/bash -c "</path/to/test/script>"
хорошо работает при выполнении просто в командной строке, но случайном сбое в сценарии, выполняемом Новомодным сервисом (получите сообщение "/bin/bash </path/to/test/script> : no such file or directory"
).
Кто-либо столкнулся с этим, также? Я с благодарностью приветствовал бы любые предложения для преодоления этого.
Один из вариантов - просто подождать, пока откроется удаленный сетевой порт, что означает, что веб-сервер запущен. Приведенный ниже код основан на этот поток на SuperUser
#!/bin/sh
SERVICE_IP=`sudo docker inspect -f \"{{.NetworkSettings.IPAddress}}\" $CONTAINER_NAME`
SERVICE_PORT=80
while ! nc -vz \$SERVICE_IP \$SERVICE_PORT; do sleep 1; done
Это может быть объединено с оркестратором сборки контейнера (если этот оркестратор изначально не поддерживает ожидание «порт контейнера запущен» - я не знаю, что доступно в этом направлении).