我有一个很奇怪的问题:
我有 swarm 集群,我的一项服务的 IP 错误:
$ docker service inspect nginx_backend | grep Addr
"Addr": "10.0.0.107/24"
从集群中的任何容器:
/ # ping nginx_backend
PING nginx_backend (10.0.0.107): 56 data bytes
64 bytes from 10.0.0.107: seq=0 ttl=64 time=0.057 ms
64 bytes from 10.0.0.107: seq=1 ttl=64 time=0.061 ms
64 bytes from 10.0.0.107: seq=2 ttl=64 time=0.064 ms
64 bytes from 10.0.0.107: seq=3 ttl=64 time=0.083 ms
^C
--- nginx_backend ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.057/0.066/0.083 ms
但是在托管
nginx_backend
的服务器中容器:root@backend:~# docker inspect nginx_backend.1.myzy10psfdl9r4jljrsz5zd5t | grep IPv4
"IPv4Address": "10.0.0.87"
当某些服务尝试按名称连接时,它会出现连接错误,但是如果我手动放置像
10.0.0.87 nginx_backend
这样的记录至 /etc/hosts
在容器内,它已成功连接。我做错了什么?)
最佳答案
Docker 为每个服务创建(默认)一个虚拟 IP (VIP)。那是 10.0.0.107
.然后平衡后端容器之间的请求。在第二个示例 ( 10.0.0.87
) 中,您将看到其中一个容器的 IP 地址。这在 Docker 中也是可路由的(这就是命中 IP 有效的原因)。然而,名称( nginx_backend.1.myzy10psfdl9r4jljrsz5zd5t
)不是 DNS 可解析的,所以这就是失败的原因。
您可以通过在 tasks.nginx_backend.
上进行 DNS 查找来找到服务的“后备”容器列表。
更多背景信息:https://docs.docker.com/network/overlay/
关于docker - docker swarm 服务中的 IP 地址错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50590866/