我正在用两个节点运行一个Docker群集群:

问题描述 投票:0回答:1
wow,当我运行docker网络检查管理器节点上的my-swarm-net时,我只看到mySQL1和nginx1,但不看到mysql1和nginx1,但没有看到mysql2和nginx2(它们在worker Node上运行)。

为什么可以互相ping但不能建立TCP连接?

如何确保所有服务都可以正确地加入覆盖网络,而TCP交通则可以使用?

docker设置 群状态

docker info

输出(简化):

Swarm: active Nodes: 2 Managers: 1 Overlay network: my-swarm-net
  • docker-compose.yml

    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
  • 我检查了什么 mysql和nginx在他们的端口上聆听

    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)用于实际通信。您可以测试是否通过同一容器打开,运行
docker docker-swarm docker-container docker-network docker-swarm-mode
1个回答
0
投票
以查看端口是否打开。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.