我正在运行一个具有2个节点的docker swarm模式集群,并部署了5个服务:[mysql,mongo,app]并希望filldb与我的管理器节点中的ansible脚本。但我无法从节点获取IP来访问容器中的数据库服务?例如: mysql -h {{mysql_service_host}} ....如何在Docker群集中获取服务的Ips?
如何从节点获取容器Ip或服务ip? 是否有可能在Docker群中使用模式主机?
我正在运行一个具有2个节点的docker swarm模式集群,并部署了5个服务:[mysql,mongo,app]并希望filldb与我的管理器节点中的ansible脚本。但我无法从节点获取IP来访问容器中的数据库服务?例如: mysql -h {{mysql_service_host}} ....如何在Docker群集中获取服务的Ips?
如何从节点获取容器Ip或服务ip? 是否有可能在Docker群中使用模式主机?
对于属于同一网络的服务(容器),您可以简单地使用服务名称。 Docker包含一个处理ip分辨率的DNS解析器。您需要使您的服务成为覆盖网络的一部分。覆盖网络可以跨越多个节点。
如:
services:
myapp:
image: myimage:1.0
deploy:
replicas: 1
networks:
- privnet
maindb:
image: mysql
deploy:
replicas: 1
networks:
- privnet
networks:
privnet:
driver: overlay
这将创建一个覆盖网络具有两个服务。相应的容器可以在任何节点上创建。它在哪里并不重要。他们都将能够相互沟通,因为他们是同一个覆盖网络的一部分。 在myapp中,您可以使用maindb
作为mysql服务的DNS。它将由Docker解析到privnet网络中的正确ip。
顺便说一句,有2个节点的群集没有多大意义。 Swarm需要至少3个节点才能运行Raft共识协议。 https://raft.github.io