¿Cómo se accede a un servicio que está en otra pila?

¿Cómo se accede a un servicio que está en otra pila?

Tengo una configuración de Docker Swarm y allí implementé dos pilas ( mainy mon). Puedo exponer un puerto en una pila y puedo hacer referencia a él desde otra. Sin embargo, estaba tratando de encontrar una manera de no hacer eso, sino de acceder a él mediante el DNS 127.0.0.11.

En montengo un servicio llamadografana

Usandohttps://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stacklo que indicó que puedo usar el nombre de la pila para referirme a ella, no funcionó cuando lo intenté, ping grafana.monsimplemente devolvió un nombre de host no válido.

Respuesta1

Para hacer esto, todo lo que necesitas es hacer que use la misma red, luego serán visibles. En mi caso, definí una red llamada public, a la que hacen referencia externamente todas mis pilas.

docker network create -d overlay --attachable public

Desde allí en mi archivo docker-compose.yml tengo

networks:
  public:
    external:
      name: public

Para acceder a él, simplemente use el nombre del servicio.

Respuesta2

Debe habilitar ambas pilas para que se conecten a través de un tipo de red superpuesta y luego permitir que ambas pilas utilicen (al menos en el servicio requerido) la red superpuesta que se creó externamente para ambas pilas.

La red superpuesta debe crearse antes de que las pilas aumenten, de modo que los servicios que necesitan conectarse puedan "conectarse" a ella.

Crea la red así.

docker network create --driver overlay --attachable 

Luego haga referencia al nombre del servicio en su archivo env, puede verificar qué nombre tienen sus servicios

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

Ahora obtenga el nombre del servicio de la columna NOMBRE. Ex:bar-stack_tar-servicio

Observe que sus servicios tienen el prefijo del nombre de pila que proporciona al implementar

docker stack ls

NAME                SERVICES            ORCHESTRATOR
foo-stack           2                   Swarm
bar-stack           2                   Swarm

información relacionada