我有一个非常奇怪的问题:
我有群集群,我的一个服务有错误的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
,则表示连接成功。
我做错了什么?)
答案 0 :(得分:2)
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/