我正在运行一个包含2个节点的docker swarm模式集群,并部署5个服务:[mysql,mongo,app],并希望从我的经理节点填充带有ansible脚本的db。但我无法从节点获取Ip来访问容器中的数据库服务? 例如: mysql -h {{mysql_service_host}} ....
如何从节点获取容器Ip或服务ip? 是否可以在docker swarm中使用模式主机?
答案 0 :(得分:0)
对于属于同一网络的服务(容器),您只需使用服务名称即可。 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。