我有一个 docker swarm 配置,在那里我部署了两个堆栈(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
它只是返回了无效的主机名。
为此,您只需使其使用相同的网络,然后它们将可见。在我的情况下,我定义了一个名为 的网络
public
,我的所有堆栈都在外部引用它从那里在我的 docker-compose.yml 文件中我有
要访问它,只需使用服务名称。
您需要启用两个堆栈以通过覆盖网络类型连接,然后允许两个堆栈使用(至少在所需的服务上)在两个堆栈外部创建的覆盖网络。
覆盖网络应该在堆栈建立之前创建,因此需要连接的服务可以“附加”到它。
像这样创建网络
然后在您的 env 文件中引用服务名称,您可以检查您的服务调用了什么名称
现在从 NAME 列中获取服务的名称。例如:bar-stack_tar-service
请注意,您的服务以您在部署时提供的堆栈名称为前缀