所以我有一个在Ubuntu主机上运行的docker引擎(版本1.12.6,build 78d1802)。为什么我无法通过名称或VIP访问Docker群集中的服务?
我创建开始使用
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
我得到预期的正确的一个群回应和一切工作到这一点。
This document和我提到的很多其他人似乎建议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访问它?
感谢@约翰。这有助于我理解这个问题。好,如果别人可以阐明如何使用单个ip或DNS从外部暴露群集,这与传统的负载平衡设置将如何执行相似,但没有静态链接任何工作节点(即在nginx配置文件中),同时考虑到我们可以随后发布docker服务规模和docker swarm连接命令,以扩展解决方案需要自动包含新节点的位置。这甚至可能吗? – Harindaka
我不知道这是否会有所帮助https://github.com/vfarcic/docker-flow-proxy – Harindaka
Docker swarm网络自动负载均衡服务的副本,关于“静态链接”,这正是dns的目的。在运行api和服务API之间有一个不同之处,你想在群集中做什么,它不是公开,而是发布它们。看看这个页面 - > https://docs.docker.com/docker-cloud/apps/ports/ – Dani