Docker Swarm - 容器可以在节点之间 ping 通,但无法通过 TCP 端口进行通信

Docker Swarm - 容器可以在节点之间 ping 通,但无法通过 TCP 端口进行通信

我正在三台 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

相关内容