无法访问泊坞窗群工作区中的缩放Web应用程序

我正在试图在Windows上testingdocker-swarm,以便更好地理解集群是如何工作的。 我开始了一个简单的图像yeasy / simple-web,并在AWS和Azure等上进行了testing。

我目前的用例是在我的本地笔记本电脑上有Windows 7.下面是我遵循的步骤:

a)使用docker-machine create --driver virtualbox一个具有一个主节点和两个工作节点的小型3节点的docker群docker-machine create --driver virtualbox …所以我有3个docker机,其IP地址为192.168.99.100-102。 经理是我在… 100节点上发起的。 101上的worker1和102上的worker2。

b)Docker运行每个节点(master,worker1和worker2)上相同端口映射的“simple-web”映像,例如使用-p 8080:80的端口映射。 我能够使用该docker-machine的本地浏览器/ curl来访问每个节点上的webapp。

c)使用以下语法在swarm主节点上创build一个服务:

 docker service create --replicas 1 --publish 8080:80 --name simple-web-svc yeasy/simple-web 

该服务显示在docker service ls输出。 一个的副本计数设置,以便我试图让容器在主节点上运行,并发生了。 我可以使用Web浏览器访问此副本。 然后,我扩大到2副本,这也是成功的docker service ls 。 但是,当我尝试使用Web浏览器访问第二副本(IP地址192.168.101)不起作用。 (我通过在每个swarm节点上执行docker ps ,计算出容器运行的swarm节点,并计算出2个副本在哪里运行; docker service ps <service_name>提供了这个方便的方法)

我的docker info如下所示:

 $docker info Containers: 21 Running: 1 Paused: 0 Stopped: 20 Images: 20 Server Version: 1.12.3 Storage Driver: aufs Root Dir: /mnt/sda1/var/lib/docker/aufs Backing Filesystem: extfs Dirs: 265 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: overlay host bridge null Swarm: active NodeID: d0hve121x3o122ozcegi9tmo0 Is Manager: true ClusterID: 81mfgps70olf4iz8z6fmh8umf Managers: 1 Nodes: 3 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Node Address: 192.168.99.100 Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 4.4.27-boot2docker Operating System: Boot2Docker 1.12.3 (TCL 7.2); HEAD : 7fc7575 - Thu Oct 27 17:23:17 UTC 2016 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 995.8 MiB Name: default ID: DDYX:XPK5:2FMG:JHTX:LDMS:XFUX:WPON:XJJH:6HXZ:E7MK:4OJP:SR22 Docker Root Dir: /mnt/sda1/var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 43 Goroutines: 149 System Time: 2017-10-28T00:38:42.587703951Z EventsListeners: 1 Registry: https://index.docker.io/v1/ Labels: provider=virtualbox Insecure Registries: 127.0.0.0/8 

请让我知道是否需要更多/其他详细的命令输出。

这里是一些额外的 cmd exec输出(我增加了副本数到2,所以我不需要在以后扩大+1):

 docker@default:~$ docker service create --replicas 2 --publish 8080:80 --name simple-web yeasy/simple-web afhnoixa2vzv3ge54iaoqk2m3 docker@default:~$ docker service ls ID NAME REPLICAS IMAGE COMMAND afhnoixa2vzv simple-web 2/2 yeasy/simple-web docker@default:~$ docker@default:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 4vl5qyxec60bj91o8fw5okkf0 swarm-worker-1 Ready Active a8u9807p0t5lquhyednsqrxih swarm-worker-2 Ready Active d0hve121x3o122ozcegi9tmo0 * default Ready Active Leader docker@default:~$ docker service ps simple-web ID NAME IMAGE NODE DESIRED ST ATE CURRENT STATE ERROR 2kvb48m0buxc4hfzx2trii10v simple-web.1 yeasy/simple-web default Running Running 10 minutes ago e2c977pexnre7p99wmqz2ii1x simple-web.2 yeasy/simple-web swarm-worker-1 Running Running 10 minutes ago docker@default:~$ docker network ls NETWORK ID NAME DRIVER SCOPE 554c408f4141 bridge bridge local afa4c8525a33 cqrsesmsspringboot_default bridge local 224b86b82b0c docker_gwbridge bridge local 1fab35dc310a host host local 928etnvuhg8x ingress overlay swarm e7afc71b2102 none null local 28123e9e93a7 postgresdockercluster_cluster bridge local docker@default:~$ docker network inspect ingress [ { "Name": "ingress", "Id": "928etnvuhg8xun0dql5ig8r2f", "Scope": "swarm", "Driver": "overlay", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "10.255.0.0/16", "Gateway": "10.255.0.1" } ] }, "Internal": false, "Containers": { "b3f07b13f2da7d20bc10af38cc161e545b6d254ef5bfc62ec4fd85ecf0aa8c4c": { "Name": "simple-web.1.2kvb48m0buxc4hfzx2trii10v", "EndpointID": "00b70edabd6f5211f1b417ea70b7118ad0cbd12e2a49d20af80715 e03096624c", "MacAddress": "02:42:0a:ff:00:07", "IPv4Address": "10.255.0.7/16", "IPv6Address": "" }, "ingress-sbox": { "Name": "ingress-endpoint", "EndpointID": "0fa7119756f1e76308ba419236231267e1ab6a2caf6d1593fce42e c5c75a8e16", "MacAddress": "02:42:0a:ff:00:03", "IPv4Address": "10.255.0.3/16", "IPv6Address": "" } }, "Options": { "com.docker.network.driver.overlay.vxlanid_list": "256" }, "Labels": {} } ] 

以下是浏览器行为的一些截图: 请求1 请求2

有人可以帮我debugging,并使其工作?

TIA。

PS我试图做一个覆盖networking,这里是我有成功的水平:

 docker@default:~$ docker service rm simple-web simple-web docker@default:~$ docker service create --replicas 1 --network myoverlaynw --publish 8080:80 --name simple-web yeasy/simple-web 0s3070f4dw8itxwxtouoe9oys docker@default:~$ docker service ls ID NAME REPLICAS IMAGE COMMAND 0s3070f4dw8i simple-web 0/1 yeasy/simple-web docker@default:~$ docker service ps simple-web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR cn5rzl4as1oo7gftwhixea72n simple-web.1 yeasy/simple-web swarm-worker-2 Running Running 8 seconds ago dqq15nua3i8kgkpmlkwx2t77i \_ simple-web.1 yeasy/simple-web swarm-worker-1 Shutdown Rejected 18 seconds ago "Failed to find a load balance." eqny9gczipwpq45jd0zhtzqov \_ simple-web.1 yeasy/simple-web swarm-worker-2 Shutdown Rejected 18 seconds ago "Failed to find a load balance." docker@default:~$ 

您必须在覆盖networking中运行您的服务:

 docker network create -d overlay my_network 

如果你现在开始这个networking内的3个服务,像这样:

 docker service create --replicas 2 --network my_network --publish 8080:80 --name simple-web yeasy/simple-web 

当所有副本都启动后,您应该能够在端口8080上的每个SWARM-IP上访问Web服务。

从Docker文档 :

你可以依靠路由网格。 当您发布服务端口时,无论是否存在该节点上运行的服务的任务,swarm都可以在每个节点上的目标端口上访问该服务。 这是不那么复杂,是许多types的服务的正确select。