我用 3 台 ubuntu 16.04 机器和 vagrant 设置了 docker swarm 模式。我认为网状路由根本不起作用。
如果我设置一个服务
docker service create --name helloworld --replicas 1 -p 8888:80 nginx
我可以看到我的服务
docker service ls
ID NAME REPLICAS IMAGE COMMAND
evbp2spkjn50 helloworld 1/1 nginx
我可以 curl 到运行实际容器的机器的 ip:
curl 172.28.100.101:8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
....
但是如果我去集群中的任何其他机器,我没有正确路由:
curl 172.28.100.102:8888
curl: (7) Failed to connect to 172.28.100.102 port 8888: Connection refused
现在,如果我扩展服务以使容器在所有机器上运行,如下所示:
docker service scale helloworld=3
helloworld scaled to 3
突然之间,我可以蜷缩起来。
curl 172.28.100.102:8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
....
这些机器之间的所有端口都是开放的(它们是vm.network :private_network, :ip => "172.28.100.10X", :netmask => "255.255.0.0"
在 vagrant 中设置的)。
我已经在没有任何变化的专用网络上进行了尝试。
docker --version
Docker version 1.12.1, build 23cf638