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

如何将Docker Swarm的overlay网络端口绑定到单个指定公网IP

解决方案

方案1:原生端口绑定指定IP(无额外配置,推荐)

Docker Compose 3.2及以上版本支持端口长语法的published_ip参数,可以直接指定Swarm路由网监听的IP,其他节点的对应端口不会被占用,无需手动配置iptables。
修改后的docker-compose.yml示例:

version: '3.9'
services:
  web1:
    image: nginx
    ports:
      - target: 80
        published: 8080
        protocol: tcp
        mode: ingress
        published_ip: 192.168.1.100 # 替换为你需要绑定的目标节点的指定IP

重新部署后,只有该IP对应的8080端口会响应服务请求,其余3台节点的8080端口可正常部署其他服务。


方案2:host端口模式+节点约束(无跨节点转发开销)

如果不需要Swarm路由网的转发能力,还可以用host端口模式配合节点约束,让端口仅绑定到服务运行的目标节点上:

  1. 先给目标节点打自定义标签,假设目标节点主机名为node01:
docker node update --label-add role=web-entry node01
  1. 修改docker-compose.yml配置:
version: '3.9'
services:
  web1:
    image: nginx
    deploy:
      placement:
        constraints:
          # 约束服务仅运行在打了对应标签的节点上
          - node.labels.role == web-entry
    ports:
      - target: 80
        published: 8080
        protocol: tcp
        # 端口使用host模式,仅绑定到服务运行节点的本地网卡
        mode: host

该方案的优势是没有路由网的跨节点流量转发开销,服务实例和端口都只在指定节点存在,其余节点的8080端口完全不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:03