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

如何使用Docker Compose连接远程Swarm可挂载Overlay网络?

问题描述

我拥有一个由3台物理独立Linux机器组成的Docker Swarm集群:1台manager节点和2台worker节点。我尝试通过overlay网络在其中一台manager节点上部署Dremio应用作为worker服务。由于存在节点专属配置(通过绑定挂载文件实现),我更倾向于直接在manager节点上使用docker compose部署,而非docker stack deploy。

我已在manager节点上创建了一个可挂载的overlay网络:

docker network create -d overlay --attachable --scope swarm css_attachable

随后我可以在manager节点上通过docker compose运行Dremio容器,并将其连接至css_attachable网络。但当我尝试在worker节点上部署Dremio executor容器时,它无法连接到css_attachable网络。根据Docker overlay网络的特性,我可以在worker节点上通过docker run命令将单个容器连接至manager的overlay网络,但无法通过docker compose实现。

实际上,执行以下示例命令后:

docker run -dit --name alpine2 --network css_attachable alpine

在worker节点上执行docker network ls可以看到css_attachable网络,但即便如此,该节点上的docker compose仍无法使用此网络。我使用的docker-compose.yml配置如下:

version: "3"
services:
  executor:
    image: dremio/dremio-oss:24.3.0
    volumes:
      - dremio_executor_1_v24_data:/opt/dremio/data
      - ./core-site.xml:/opt/dremio/conf/core-site.xml
      - ./dremio.conf:/opt/dremio/conf/dremio.conf
    ports:
      - "9047:9047"
      - "31010:31010"
      - "32010:32010"
      - "45678:45678"
      - "2181:2181"
    networks:
      - css_attachable
    hostname: dremio-executor-1

volumes:
  dremio_executor_1_v24_data:
    external: true

networks:
  public:
    external:
      name: css_attachable

和alpine示例一样,我可以在worker节点上通过docker run成功连接至css_attachable网络:

docker run --name=dremio-executor -d --net=css_attachable -p 9047:9047 -p 31010:31010 -p 32010:32010 -p 45678:45678 -p 2181:2181 -v dremio_executor_1_v24_data:/opt/dremio/data -v ./dremio.conf:/opt/dremio/conf/dremio.conf -v ./core-site.xml:/opt/dremio/conf/core-site.xml dremio/dremio-oss

请问是否有办法在本地docker compose中使用这个远程overlay网络?我想要一种能让Docker引用远程主机overlay网络的方法,这可行吗?

解决方案

问题出在你的docker-compose.yml配置里的网络映射不匹配:你在services.executor.networks里指定的是css_attachable,但在networks段里定义的外部网络键名是public,这导致Compose无法正确关联到目标网络。

修正后的docker-compose.yml需统一网络名称:

version: "3"
services:
  executor:
    image: dremio/dremio-oss:24.3.0
    volumes:
      - dremio_executor_1_v24_data:/opt/dremio/data
      - ./core-site.xml:/opt/dremio/conf/core-site.xml
      - ./dremio.conf:/opt/dremio/conf/dremio.conf
    ports:
      - "9047:9047"
      - "31010:31010"
      - "32010:32010"
      - "45678:45678"
      - "2181:2181"
    networks:
      - css_attachable
    hostname: dremio-executor-1

volumes:
  dremio_executor_1_v24_data:
    external: true

networks:
  css_attachable:
    external:
      name: css_attachable

额外注意事项:

  • 确认worker节点已正常加入Swarm集群,且能同步Swarm网络资源(你已通过docker run验证网络存在,此条件已满足)
  • 若使用Docker Compose v2+版本,直接在worker节点执行docker compose up -d即可,Compose会自动识别已存在的Swarm可挂载overlay网络
  • 绑定挂载的节点专属配置文件(./core-site.xml、./dremio.conf)必须存在于worker节点的当前执行目录下,否则容器启动会失败

这种方案完全可行,因为Swarm的可挂载overlay网络允许独立容器(非Swarm服务)连接,而Docker Compose本质就是管理一组独立容器,只要配置正确,就能正常使用该网络。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:23:14