You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一局域网下Windows与Ubuntu主机Docker容器跨主机通信咨询

overlay网络报错原因排查
  • 未正确配置Docker Swarm集群:overlay网络依赖Swarm集群实现跨节点通信,你遇到的超时错误90%以上是节点间通信链路异常导致
  • 所需端口未放行:Swarm集群要求2377/tcp(集群管理)、7946/tcp/udp(节点发现)、4789/udp(overlay流量)三个端口在两台主机的防火墙(Ubuntu的ufw、Windows的Defender防火墙)都正常放行,端口拦截会直接触发超时报错
  • Windows Docker Desktop网络适配问题:如果用WSL2后端,默认NAT模式下Ubuntu主机无法直接访问Windows Docker节点的虚拟IP,会导致Swarm节点加群失败
可行解决方案

方案1:端口映射方案(最适合当前需求,无需改造网络)

仅需要Adminer连接MariaDB的场景下,直接用主机端口映射即可实现互通,无需配置复杂的跨主机容器网络:

  • 启动Ubuntu端的MariaDB容器时,将3306端口绑定到Ubuntu主机的局域网IP,不要仅绑定127.0.0.1:
    docker run -d -p 192.168.x.xxx:3306:3306 --name mariadb -e MARIADB_ROOT_PASSWORD=你的密码 mariadb:latest
    请将192.168.x.xxx替换为Ubuntu主机的静态局域网IP
  • Ubuntu端放行3306端口:ufw allow 3306/tcp
  • 启动Windows端的Adminer容器时,直接填写Ubuntu主机的局域网IP+3306作为数据库地址即可正常连通

方案2:修复overlay网络实现全容器互通

如果需要多容器跨主机普遍互通,按以下步骤修复配置:

  1. 提前固定两台主机的局域网静态IP,避免IP变动导致集群失效
  2. 两台主机放行Swarm所需端口:
    • Ubuntu端执行:
      ufw allow 2377/tcp
      ufw allow 7946/tcp
      ufw allow 7946/udp
      ufw allow 4789/udp
      ufw reload
      
    • Windows端打开Defender防火墙高级设置,添加入站规则放行上述三个端口的TCP/UDP协议
  3. 初始化Swarm集群(以Ubuntu作为管理节点):
    Ubuntu端执行docker swarm init --advertise-addr 192.168.x.xxx,替换为Ubuntu的局域网IP,执行完成后复制输出的节点加入命令
  4. Windows节点加入集群:
    打开Windows PowerShell(WSL2后端需要先在WSL终端执行一次),粘贴刚才复制的加入命令执行,提示This node joined a swarm as a worker即为成功
  5. 创建可接入的overlay网络:
    Ubuntu端执行docker network create --driver overlay --attachable cross-host-net,--attachable参数允许普通容器(非Swarm服务容器)接入该网络
  6. 启动容器时指定接入该网络即可:
    • 启动MariaDB时添加--network cross-host-net参数
    • 启动Adminer时也添加--network cross-host-net参数,后续直接用MariaDB的容器名作为数据库地址即可连通

内容的提问来源于stack exchange,提问作者aicatsana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:36:03