我正在尝试在Windows上测试docker-swarm,以便更好地了解群集的工作原理。我从一个简单的图像yeasy / simple-web开始,并在AWS和Azure等上测试过它。
我当前的用例是在我的本地笔记本电脑上,它有Windows 7.以下是我遵循的步骤:
a)使用docker-machine create --driver virtualbox
设置一个小型3节点泊坞群,其中包含一个主节点和2个工作节点...
所以我有3台docker机器,其ip addr为192.168.99.100-102。经理是我在... 100节点上初始化的。 101上的worker1和102上的worker2。
-p 8080:80
的端口映射。我可以使用该docker-machine本地的Web浏览器/ curl访问每个节点上的webapp。
c)使用以下语法在swarm主节点上创建服务:
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 addr 192.168.101)时,它不起作用。 (我通过在每个群集节点上执行docker ps
并找出2个副本运行的位置来计算运行容器的swarm节点;同样docker service ps <service_name>
以方便的方式提供此功能)< / p>
我的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": {}
}
]
有人可以帮我调试并使其正常工作吗?
TIA。
P.S。我尝试过覆盖网络,这是我所拥有的成功水平:
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:~$
答案 0 :(得分:0)
您必须在覆盖网络中运行服务:
docker network create -d overlay my_network
如果您现在在此网络中启动3个服务,请执行以下操作:
docker service create --replicas 2 --network my_network --publish 8080:80 --name simple-web yeasy/simple-web
当所有副本都启动时,您应该能够访问端口8080上每个SWARM-IP上的Web服务。
您可以依赖路由网格。当您发布服务端口时, swarm使服务可以在每个节点上的目标端口访问, 无论是否有运行该服务的任务 节点与否。这不太复杂,是许多人的正确选择 服务类型。
答案 1 :(得分:0)
当我使用不同的docker版本时,这发生在我身上。只需检查swarm worker和manager中的docker版本。我还将所有docker版本升级到18.03.1-ce。
(有时这不是你问题的答案,因为你正在使用虚拟机。我正在使用不同的服务器。)
希望这会有所帮助