Por que não olhar para um orquestrador de docker específico, como flynn, deis, estaleiro, etc.?
Uma lista completa aqui
Estou tentando implantar 3 contêineres do Docker, tendo uma relação de dependência entre eles (A - > B - > C). Agora, cada contêiner deve executar uma instância do Akka-Spray, sobre uma instância da JVM.
O problema é: seguindo as abordagens usuais de orquestração, o contêiner A foi iniciado, mas o servidor web não teve tempo de inicializar. Se ele não estiver ativo e em execução antes que o contêiner B esteja operacional, o contêiner B nunca alcançará e assim por diante, com C.
Eu tenho tentado a seguinte abordagem ultimamente: compartilhar um volume de dados entre contêineres; depois que o servidor da Web estiver pronto, um script auxiliar criará um arquivo vazio no volume; executar um script (por meio de um serviço do Upstart) que procura um arquivo vazio para mostrar e dispara o próximo contêiner.
No entanto, o uso de um serviço provavelmente é a causa desse problema: executando
sudo docker run -d -it --name=backend -v ~/docker-test/:/docker-test -v ~/aux/:/aux ubuntu /bin/bash -c "</path/to/test/script>"
funciona bem quando feito simplesmente na linha de comando, mas falha aleatoriamente no script executado pelo serviço Upstart (recebe a mensagem "/bin/bash </path/to/test/script> : no such file or directory"
).
Alguém se deparou com isso também? Eu agradeço muito as sugestões para superar isso.
Por que não olhar para um orquestrador de docker específico, como flynn, deis, estaleiro, etc.?
Uma lista completa aqui
Uma opção é apenas aguardar até que a porta de rede remota esteja aberta, o que indica que o servidor da Web foi iniciado. O código abaixo é baseado em este tópico no 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
Isso pode ser combinado a um orquestrador de criação de contêineres (se esse orquestrador não oferecer suporte nativo à espera de que "a porta do contêiner esteja ativa" - não sei o que está disponível nessa direção).