我有一个坞群配置,在其中我部署了两个堆栈(main和mon),我可以在一个堆栈中公开一个端口,我可以从另一个堆栈引用它。但是,我试图找到一种方法,不这样做,而是让它使用127.0.0.11 DNS访问它。
在mon中,我有一个名为grafana的服务
使用https://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stack,这表明我可以使用堆栈名来引用它,但是当我试图使用ping grafana.mon时,它没有工作,它只是返回无效的主机名。
发布于 2018-03-26 22:17:10
要做到这一点,您所需要的就是让它使用相同的网络,然后他们将是可见的。在我的例子中,我定义了一个名为public的网络,它是由我的所有堆栈外部引用的。
docker network create -d overlay --attachable public在我的docker-compose.yml文件中
networks:
public:
external:
name: public要访问它,只需使用服务名称。
发布于 2020-11-08 19:05:55
您需要启用两个堆栈通过覆盖网络类型进行连接,然后允许两个堆栈使用(至少在所需的服务上)外部为两个堆栈创建的覆盖网络。
覆盖网络应该在堆栈上升之前创建,因此需要连接的服务可以“附加”到它上。
创建这样的网络
docker network create --driver overlay --attachable 然后在env文件中引用服务名称,您可以检查服务调用的名称。
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现在从name列获取服务的名称。例:酒吧-堆叠焦油服务
请注意,您的服务以部署时指定的堆栈名称作为前缀。
docker stack ls
NAME SERVICES ORCHESTRATOR
foo-stack 2 Swarm
bar-stack 2 Swarmhttps://serverfault.com/questions/904535
复制相似问题