
Eu tenho uma configuração docker swarm e nela implantei duas pilhas ( main
e mon
). Posso expor uma porta em uma pilha e posso consultá-la de outra. No entanto, eu estava tentando encontrar uma maneira de não fazer isso, mas sim acessá-lo usando o DNS 127.0.0.11.
Em mon
eu tenho um serviço chamadografana
Usandohttps://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stackque indicou que posso usar o nome da pilha para me referir a ela, não funcionou quando tentei, ping grafana.mon
apenas retornou um nome de host inválido.
Responder1
Para isso, basta fazer com que ele utilize a mesma rede, então eles ficarão visíveis. No meu caso eu defini uma rede chamada public
, que é referenciada externamente por todas as minhas pilhas
docker network create -d overlay --attachable public
A partir daí, no meu arquivo docker-compose.yml, tenho
networks:
public:
external:
name: public
Para acessá-lo, basta usar o nome do serviço.
Responder2
Você precisa permitir que ambas as pilhas se conectem por meio de um tipo de rede de sobreposição e, em seguida, permitir que ambas as pilhas usem (pelo menos no serviço necessário) a rede de sobreposição que foi criada externamente para ambas as pilhas.
A rede de sobreposição deve ser criada antes que as pilhas subam, para que os serviços que precisam se conectar possam se 'anexar' a ela.
Crie a rede assim
docker network create --driver overlay --attachable
Em seguida, faça referência ao nome do serviço em seu arquivo env, você pode verificar qual nome seus serviços chamam
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
vkz5vccbmce7 foo-stack_por-service replicated 1/1 por-service:1.0.0 *:33065->3306/tcp
sjpnrkm1iiha foo-stack_vic-service replicated 1/1 vic-service:1.0.0 *:8081->80/tcp
0capavl31oab bar-stack_tar-service replicated 1/1 tar-service:1.0.0 *:33066->3306/tcp
9vohh24jt6hy bar-stack_zen-service replicated 1/1 zen-service:1.0.0 *:8082->80/tcp
Agora obtenha o nome do serviço na coluna NOME. Ex:bar-stack_tar-service
Observe que seus serviços são prefixados pelo nome da pilha que você fornece ao implantar
docker stack ls
NAME SERVICES ORCHESTRATOR
foo-stack 2 Swarm
bar-stack 2 Swarm