为什么可以互相ping但不能建立TCP连接?
?
如何确保所有服务都可以正确地加入覆盖网络,而TCP交通则可以使用?
docker设置 群状态
docker info
Swarm: active
Nodes: 2
Managers: 1
Overlay network: my-swarm-net
version: "3.9"
services:
mysql1:
image: mysql:8.0.41-debian
networks:
- my-swarm-net
deploy:
placement:
constraints:
- "node.role == manager"
mysql2:
image: mysql:8.0.41-debian
networks:
- my-swarm-net
deploy:
placement:
constraints:
- "node.role == worker"
nginx1:
image: nginx:latest
networks:
- my-swarm-net
deploy:
placement:
constraints:
- "node.role == manager"
nginx2:
image: nginx:latest
networks:
- my-swarm-net
deploy:
placement:
constraints:
- "node.role == worker"
networks:
my-swarm-net:
driver: overlay
attachable: true
ss -tulnp | grep 3306 # Inside mysql2
tcp LISTEN 0 151 *:3306 *:*
Firewall规则(Centos Stream 9)
sudo firewall-cmd --list-ports All required ports (2377, 7946, 4789, 3306, 80) are open.
Manager节点(10.1.109.70)上的Docker网络检查
docker network inspect my-swarm-net
仅出现mysql1和nginx1!
MySQL2和Nginx2(在Worker节点10.1.109.60上)都缺少。
tried重新创建网络
docker network rm my-swarm-net
docker network create --driver=overlay --attachable my-swarm-net
docker service update --force mysql2
因同样的问题。
检查工人节点(10.1.109.60)
docker ps
MySQL2和NGINX2正在运行。
检查工作人员是否连接到覆盖网络
docker network inspect my-swarm-net
工人节点未出现在网络列表中!
首先,无论发生什么其他事情,
docker network inspect
docker network inspect
next,您将Manager节点和Worker节点描述为具有IP地址10.1.x.x.。这非常不舒服地接近Docker Swarms覆盖网络所使用的范围。为了防止冲突,您应该编辑分配给Docker配置中桥接网络的地址池(通常是整个172.16.0.0/12和192.168.0.0/16范围),然后重新启动Docker swarm,指定非重叠范围的覆盖网络,以确保桥梁和覆盖网络范围内的范围避免使用范围。到了所有这些解决,基本上有3个级别可以在Docker Swarm上进行连接:
港口2377用于Docker Swarm工人与Swarm经理建立联系。因此,如果诸如
docker node ls
docker service ls
,
docker service ps <id>
都在工作,那么经理和工人都在谈论。
docker swarm使用了port 7946来八卦服务任务DNS详细信息,因此,如果您将执行到连接到my-swarm-net
的容器中,则应该能够
dig tasks.mysql1
和
dig tasks.mysql2
等,以获取每个容器的IP地址。
PORT4789(UDP)用于实际通信。您可以测试是否通过同一容器打开,运行