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

双网卡Docker服务如何配置实现不同容器仅通过指定接口可访问

配置前常见疏漏说明

绝大多数类似多网络配置失效的核心原因是两点:

  1. 端口映射时未指定监听的物理网卡IP,Docker默认监听0.0.0.0,导致所有网卡都能访问对应端口
  2. 未配置策略路由,两个Docker网桥的流量默认都走主机的默认路由,无法实现出口绑定
方案1:自定义网桥绑定出口(低难度,无需macvlan)

该方案不需要修改现有网络架构,仅需新增路由规则和调整Docker配置即可实现需求:

  • 步骤1:创建两个专属Docker网桥
    分别规划两个网桥的独立网段,执行以下命令创建,网段可根据自身需求调整,不要和现有LAN、VPN网段冲突即可:
    # 创建LAN侧网桥,对应物理网卡eth0
    docker network create --driver bridge --subnet 172.20.0.0/16 --opt com.docker.network.bridge.name=docker-lan lan_net
    # 创建VPN侧网桥,对应物理网卡eth1
    docker network create --driver bridge --subnet 172.30.0.0/16 --opt com.docker.network.bridge.name=docker-vpn vpn_net
    
  • 步骤2:配置策略路由绑定出口
    首先在/etc/iproute2/rt_tables文件末尾新增两行路由表标识:
    100 lanrt
    200 vpnrt
    
    执行以下命令添加路由规则,替换中括号内容为你实际的网关地址,若需要规则开机自动生效,可将路由规则写入开机启动脚本:
    # 配置LAN侧网桥流量走eth0
    ip rule add from 172.20.0.0/16 table lanrt
    ip route add default via [LAN网关IP] dev eth0 table lanrt
    # 配置VPN侧网桥流量走eth1
    ip rule add from 172.30.0.0/16 table vpnrt
    ip route add default via [VPN隧道网关IP] dev eth1 table vpnrt
    # 刷新路由缓存生效
    ip route flush cache
    
  • 步骤3:调整docker-compose配置
    给需要走指定网卡的容器分配对应网桥,同时端口映射时指定对应物理网卡的IP,避免全网卡监听:
    version: '3'
    networks:
      lan_net:
        external: true
      vpn_net:
        external: true
    services:
      # 仅LAN可访问的服务
      lan-service:
        image: nginx
        networks:
          - lan_net
        # 仅在eth0的LAN IP上监听80端口
        ports:
          - "[eth0的LAN IP]:80:80"
      # 仅VPN可访问的服务
      vpn-service:
        image: nginx
        networks:
          - vpn_net
        # 仅在eth1的VPN IP上监听80端口
        ports:
          - "[eth1的VPN IP]:80:80"
    
方案2:macvlan配置指南(最优场景为容器需和物理网络同网段)

如果需要容器直接获取LAN/VPN网段的原生IP、无需端口映射,可使用该方案:

  • 步骤1:开启物理网卡混杂模式
    ip link set eth0 promisc on
    ip link set eth1 promisc on
    
  • 步骤2:创建macvlan网络
    替换中括号的网段、网关参数为你的实际值:
    # LAN侧macvlan网络
    docker network create -d macvlan --subnet=[LAN网段,如192.168.1.0/24] --gateway=[LAN网关IP] -o parent=eth0 macvlan_lan
    # VPN侧macvlan网络
    docker network create -d macvlan --subnet=[VPN网段] --gateway=[VPN网关IP] -o parent=eth1 macvlan_vpn
    
  • 步骤3:docker-compose配置示例
    version: '3'
    networks:
      macvlan_lan:
        external: true
      macvlan_vpn:
        external: true
    services:
      lan-service:
        image: nginx
        networks:
          macvlan_lan:
            # 指定LAN网段内的固定IP
            ipv4_address: 192.168.1.200
      vpn-service:
        image: nginx
        networks:
          macvlan_vpn:
            # 指定VPN网段内的固定IP
            ipv4_address: [VPN网段内的IP]
    
    配置完成后容器可直接通过分配的固定IP从对应网段访问,无需端口映射。如果需要宿主机和macvlan容器通信,可额外创建宿主机端的macvlan子接口配置同网段IP即可。

内容的提问来源于stack exchange,提问作者bas.cmd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:02