如何在docker swarm集群中获取服务的Ips?

时间:2017-04-24 08:47:24

标签: docker docker-registry docker-swarm docker-swarm-mode

我正在运行一个包含2个节点的docker swarm模式集群,并部署5个服务:[mysql,mongo,app],并希望从我的经理节点填充带有ansible脚本的db。但我无法从节点获取Ip来访问容器中的数据库服务? 例如:   mysql -h {{mysql_service_host}} ....

如何从节点获取容器Ip或服务ip? 是否可以在docker swarm中使用模式主机?

1 个答案:

答案 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。

不过,拥有2个节点的群集群并没有多大意义。 Swarm需要至少3个节点才能使Raft共识协议正常工作。 https://raft.github.io