在 SWARM 中无法从工作节点访问服务
In SWARM not able to access service from worker node
我是 docker 世界的新手。在学习过程中,我创建了以下设置:
1.Virtual 机器 - Ubuntu 20 运行 在 VMware workstation 15 Player 上。 IP-192.168.0.106。我可以从这个 VM(比如 VM1)访问互联网,并可以从我的物理系统 ping 那个系统 OS( Windows 10)
2.Virtual 机器 - Ubuntu 20 运行 在 VMware workstation 15 Player 上。 IP-192.168.0.105。我可以从这个 VM(比如 VM2)访问互联网,并可以从我的物理系统 ping 那个系统 OS( Windows 10)
现在我已经从 VM1 创建了 swarm,如下所示:
sudo docker swarm init --advertise-addr 192.168.0.106:2377 --listen-addr 192.168.0.106:2377
然后我在这个swarm中添加了VM2如下:
sudo docker swarm join --token SWMTKN-1-4i56y47l6o4aycrmg7un21oegmfmwnllcsxaf4zxd05ggqg0zh-9qp67bejerq9dhl3f0suaauvl 192.168.0.106:2377 --advertise-addr 192.168.0.105:2377 --listen-addr 192.168.0.105:2377
之后我查看了 swarm 的详细信息:
sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ogka7rdjohri9elcbjjcpdlbp * ubuntumaster Ready Active Leader 19.03.12
7qu9kiprcz7oowfk2ol31k1mx ubuntuslave Ready Active 19.03.13
然后在VM1上部署nginx服务如下:
sudo docker service create -d --name myweb1 --mode global -p9090:80 nginx:1.19.3
服务状态:
sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
e1o9cbm3e0t myweb1 global 2/2 nginx:1.19.3 *:9090->80/tcp
- 服务详情:
sudo docker service ps zf6kfw7aqhag
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
egd8oliwngf3 myweb1.ogka7rdjohri9elcbjjcpdlbp nginx:1.19.3 ubuntumaster Running Running 14 minutes ago
1o4q8dlt94jj myweb1.7qu9kiprcz7oowfk2ol31k1mx nginx:1.19.3 ubuntuslave Running Running 14 minutes ago
现在我可以使用 URL 从 VM1 访问 nginx:192.168.0.106:9090
和 localhost:9090
。但是我无法使用 URL:192.168.0.105:9090
和 localhost:9090
从 VM2 访问 nginx。我的理解是 nginx 在两个虚拟机上都是 运行 并且可以在两个虚拟机上访问。
在两个 VM1 中我都能看到 nginx 容器是 运行。
VM1 :
sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a4e13e49dfd nginx:1.19.3 "/docker-entrypoint.…" 16 minutes ago Up 15 minutes 80/tcp myweb1.ogka7rdjohri9elcbjjcpdlbp.egd8oliwngf35wwpjcieew323
VM2:
sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
999062110f0 nginx:1.19.3 "/docker-entrypoint.…" 16 minutes ago Up 16 minutes 80/tcp myweb1.7qu9kiprcz7oowfk2ol31k1mx.1o4q8dlt94jj4uufysnhsbamd
如果我做错了,请指导我。
TIA,
黛布
问题解决了!这是一个问题是 ip 冲突。重新启动整个系统,包括虚拟机和路由器以解决此问题。
我是 docker 世界的新手。在学习过程中,我创建了以下设置:
1.Virtual 机器 - Ubuntu 20 运行 在 VMware workstation 15 Player 上。 IP-192.168.0.106。我可以从这个 VM(比如 VM1)访问互联网,并可以从我的物理系统 ping 那个系统 OS( Windows 10)
2.Virtual 机器 - Ubuntu 20 运行 在 VMware workstation 15 Player 上。 IP-192.168.0.105。我可以从这个 VM(比如 VM2)访问互联网,并可以从我的物理系统 ping 那个系统 OS( Windows 10)
现在我已经从 VM1 创建了 swarm,如下所示:
sudo docker swarm init --advertise-addr 192.168.0.106:2377 --listen-addr 192.168.0.106:2377
然后我在这个swarm中添加了VM2如下:
sudo docker swarm join --token SWMTKN-1-4i56y47l6o4aycrmg7un21oegmfmwnllcsxaf4zxd05ggqg0zh-9qp67bejerq9dhl3f0suaauvl 192.168.0.106:2377 --advertise-addr 192.168.0.105:2377 --listen-addr 192.168.0.105:2377
之后我查看了 swarm 的详细信息:
sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ogka7rdjohri9elcbjjcpdlbp * ubuntumaster Ready Active Leader 19.03.12
7qu9kiprcz7oowfk2ol31k1mx ubuntuslave Ready Active 19.03.13
然后在VM1上部署nginx服务如下:
sudo docker service create -d --name myweb1 --mode global -p9090:80 nginx:1.19.3
服务状态:
sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
e1o9cbm3e0t myweb1 global 2/2 nginx:1.19.3 *:9090->80/tcp
- 服务详情:
sudo docker service ps zf6kfw7aqhag
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
egd8oliwngf3 myweb1.ogka7rdjohri9elcbjjcpdlbp nginx:1.19.3 ubuntumaster Running Running 14 minutes ago
1o4q8dlt94jj myweb1.7qu9kiprcz7oowfk2ol31k1mx nginx:1.19.3 ubuntuslave Running Running 14 minutes ago
现在我可以使用 URL 从 VM1 访问 nginx:
192.168.0.106:9090
和localhost:9090
。但是我无法使用 URL:192.168.0.105:9090
和localhost:9090
从 VM2 访问 nginx。我的理解是 nginx 在两个虚拟机上都是 运行 并且可以在两个虚拟机上访问。在两个 VM1 中我都能看到 nginx 容器是 运行。
VM1 :
sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a4e13e49dfd nginx:1.19.3 "/docker-entrypoint.…" 16 minutes ago Up 15 minutes 80/tcp myweb1.ogka7rdjohri9elcbjjcpdlbp.egd8oliwngf35wwpjcieew323
VM2:
sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
999062110f0 nginx:1.19.3 "/docker-entrypoint.…" 16 minutes ago Up 16 minutes 80/tcp myweb1.7qu9kiprcz7oowfk2ol31k1mx.1o4q8dlt94jj4uufysnhsbamd
如果我做错了,请指导我。
TIA,
黛布
问题解决了!这是一个问题是 ip 冲突。重新启动整个系统,包括虚拟机和路由器以解决此问题。