Eu tenho um pequeno cluster na rackspace com uma rede privada no intervalo 192.168.3.0/24. Gostaria que meus serviços de trabalho conversassem entre si usando essa rede, mas não conseguissem descobrir como obter o docker para permitir isso.
Minha configuração ideal seria um único contêiner voltado para o público que faça o proxies das conexões com um trabalhador que possa, então, conversar com vários serviços dentro da rede privada para realizar seu trabalho.
eth0 -> load balancer --> 192.168.3.3:80 --> 192.168.3.5:1234 (db)
\-> 192.168.3.4:80 /
\> 192.168.3.5:80/
Se todos os funcionários estivessem na mesma máquina, eu poderia realizar isso com docker run --link ...
, mas como eles estão em máquinas diferentes, isso não funcionará.
Os trabalhadores no exemplo acima são iniciados com um comando semelhante a este:
docker run -d -p $PRIVATE_IPV4:80:80 myworker
e o banco de dados começou assim:
docker run -d -p $PRIVATE_IPV4:1234:1234 mydb
Do host , posso falar com cada um dos contêineres, mas cada contêiner não pode rotear para nenhum outro contêiner. I.E. curl http://192.168.3.4
funciona do host, mas não de um contêiner em execução no host.
O balanceador de carga, neste caso, é o nginx iniciado assim:
docker run -d -p $PUBLIC_IPV4:80:80 nginx
nginx.conf
upstream app {
server 192.168.3.3:80;
server 192.168.3.4:80;
server 192.168.3.5:80;
}
...
Isto parece ser uma configuração bastante normal. O que estou fazendo errado?