【问题标题】:How to fetch Ips of a service in docker swarm cluster ?如何在 docker swarm 集群中获取服务的 Ips?
【发布时间】:2017-04-24 08:47:23
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    对于属于同一网络的服务(容器),您可以简单地使用服务名称。 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 集群没有多大意义。 Swarm 需要至少 3 个节点才能使 Raft 共识协议工作。 https://raft.github.io

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多