如何使用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

