2017-04-24 17 views
1

我正在运行一个具有2个节点的docker swarm模式集群,并部署了5个服务:[mysql,mongo,app]并希望filldb与我的管理器节点中的ansible脚本。但我无法从节点获取IP来访问容器中的数据库服务?例如: mysql -h {{mysql_service_host}} ....如何在Docker群集中获取服务的Ips?

如何从节点获取容器Ip或服务ip? 是否有可能在Docker群中使用模式主机?

回答

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。

顺便说一句,有2个节点的群集没有多大意义。 Swarm需要至少3个节点才能运行Raft共识协议。 https://raft.github.io

相关问题