所以我有一个在 Ubuntu 主机上运行的 docker 引擎(版本 1.12.6,构建 78d1802)。
我创建了一个使用
docker swarm init --advertise-addr 192.168.1.2
我有一个本地预构建的图像,我使用它创建了一个名为 nodeapp 的服务,如下所示
docker service create --name nodeapp --publish 3000:3000 --replicas 2 node-app-image
现在,当我键入时,curl localhost:3000
我得到了预期的正确响应,并且到目前为止一切正常。
该文档和我提到的许多其他文档似乎表明 docker v1.12.x 通过 DNS 或 VIP 方法内置了负载平衡/路由。
所以我试图通过服务名称或虚拟IP访问我的服务,如下所示
curl nodeapp:3000
我得到的curl: (6) Could not resolve host: nodeapp
和
curl 10.255.0.6:3000
我得到的curl: (7) Failed to connect to 10.255.0.6 port 3000: Connection timed out
注意我使用下面的命令来获取虚拟ip
docker service inspect --format {{.Endpoint.VirtualIPs}} nodeapp
产生[{boq3g7s47w47q2ej56li9s3dw 10.255.0.6/16}]
为什么我无法使用 VIP 或服务名称访问我的服务,即使我可以使用 localhost:3000 访问它?