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

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

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

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

最佳答案

对于属于同一网络的服务(容器),您可以简单地使用服务名称。 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 共识协议(protocol)工作。 https://raft.github.io

关于docker - 如何在 docker swarm 集群中获取服务的 Ips?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43583552/

相关文章:

apache-spark - spark 中 worker 的 WebUI 访问

linux - 使用另一个应用程序在 docker 中运行 nginx

docker - 在docker-compose期间,Kibana数据已丢失

Docker 公共(public)注册表推送失败 : Repository does not exist

docker - Docker垃圾收集器未找到任何要删除的内容

python - 如何在 docker 上运行我的 python 脚本?

python - AWS Fargate 任务 - awslogs 驱动程序 - 间歇性日志

docker - 使用 lint 命令构建 docker go 应用程序

docker - 我可以在 Docker Private Repository 中存储多少个 docker 镜像

docker - 无法从外部访问在 docker swarm 上运行的容器