
Tengo una configuración de Docker Swarm y allí implementé dos pilas ( main
y 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 mon
tengo 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.mon
simplemente 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