我正在三台 Linux 机器上设置新的 Docker Swarm 模式集群 - 全部都是全新安装。这三台机器的防火墙和安全模块 (AppArmor) 均已禁用,我可以确认它们可以通过端口7946
(TCP 和 UDP) 和4789
(UDP) 进行通信。
例如,我正在提出的其中一个堆栈:
...
wikijs_db:
image: postgres:11-alpine
deploy:
replicas: 1
environment:
POSTGRES_DB: ***
POSTGRES_PASSWORD: ***
POSTGRES_USER: ***
HA_ACTIVE: 1
restart: unless-stopped
volumes:
- db_data:/var/lib/postgresql/data
- db_assets:/root/assets
wikijs_wiki:
image: requarks/wiki:2.5
deploy:
replicas: 1
depends_on:
- wikijs_db
environment:
DB_TYPE: postgres
DB_HOST: wikijs_db
DB_PORT: 5432
DB_USER: ***
DB_PASS: ***
DB_NAME: ****
HA_ACTIVE: 1
volumes:
- "/etc/localtime:/etc/localtime:ro"
- data:/backup/data
- assets:/root/assets
...
创建集群时,容器分布在节点之间 - 并且可以通信ping
,以及解析其主机名:
/wiki $ ping wikijs_db
PING wikijs_db (10.0.1.4): 56 data bytes
64 bytes from 10.0.1.4: seq=0 ttl=42 time=0.113 ms
64 bytes from 10.0.1.4: seq=1 ttl=42 time=0.134 ms
但是容器无法通过 TCP 进行通信:
/wiki $ nc -vz wikijs_db 5432
nc: wikijs_db (10.0.1.4:5432): Operation timed out
这仅发生在群体中的节点之间。
我尝试过重建集群、重新安装操作系统、运行不同的容器以及为默认网络分配预定义子网,但均未成功。我在任何节点的 Docker 守护进程日志中均未看到任何错误。
我将非常感激能够帮助我解决此问题。
谢谢你!
答案1
ethtool -K [interface] tx off
按照此线程中的建议运行即可解决:https://stackoverflow.com/questions/66251422/docker-swarm-overlay-network-icmp-works-but-not-anything-else