Como você acessa um serviço que está em outra pilha?

Como você acessa um serviço que está em outra pilha?

Eu tenho uma configuração docker swarm e nela implantei duas pilhas ( maine 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 moneu 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.monapenas 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

informação relacionada