You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker多桥接网络配置:容器端口分绑不同物理网卡方法

配置Docker多桥接网络实现分网卡端口映射

没问题,我来一步步帮你完成这个配置,让你的Docker容器分别通过eth0(公网)和eth1(内网)对外提供不同服务:

第一步:创建绑定指定网卡的自定义Docker网桥

Docker默认的docker0网桥不会绑定到特定物理网卡,所以我们需要创建两个自定义网桥,分别关联你的内网和公网网卡:

1. 创建内网网桥(绑定eth1)

执行以下命令,其中y.y.y.y替换成你的eth1实际IP:

docker network create -d bridge \
  --subnet=172.18.0.0/16 \
  --gateway=172.18.0.1 \
  -o "com.docker.network.bridge.name"="docker_intra" \
  -o "com.docker.network.bridge.host_binding_ipv4"="y.y.y.y" \
  docker_intra
  • --subnet--gateway:自定义内网网桥的子网段(可根据你的内网规划调整)
  • com.docker.network.bridge.host_binding_ipv4:指定该网桥绑定到eth1的IP,确保容器通过这个网桥的端口映射只会走eth1网卡
  • docker_intra:网桥的自定义名称,方便后续引用

2. 创建公网网桥(绑定eth0)

同样,把x.x.x.x替换成你的eth0实际IP:

docker network create -d bridge \
  --subnet=172.19.0.0/16 \
  --gateway=172.19.0.1 \
  -o "com.docker.network.bridge.name"="docker_public" \
  -o "com.docker.network.bridge.host_binding_ipv4"="x.x.x.x" \
  docker_public

第二步:验证网桥配置

执行以下命令确认网桥已成功创建并绑定到指定网卡:

# 查看所有Docker网桥列表
docker network ls

# 检查内网网桥的绑定信息
ip addr show docker_intra

# 检查公网网桥的绑定信息
ip addr show docker_public

你应该能看到docker_intradocker_public分别关联到eth1和eth0的对应IP。

第三步:启动容器并关联双网桥

现在可以启动Apache容器,同时加入两个网桥,并分别映射端口到指定网卡:

docker run -d \
  --name apache-server \
  # 加入公网网桥,映射80端口到eth0
  --network docker_public \
  -p x.x.x.x:80:80 \
  # 加入内网网桥,映射1024端口到eth1
  --network docker_intra \
  -p y.y.y.y:1024:1024 \
  # 使用官方Apache镜像
  httpd:latest
  • --network:重复使用该参数让容器同时加入两个独立网桥
  • -p x.x.x.x:80:80:明确将容器的80端口映射到eth0的80端口,确保公网用户只能通过eth0访问Web UI
  • -p y.y.y.y:1024:1024:将容器的1024端口映射到eth1的1024端口,仅内网用户可通过这个端口访问数据接收服务

额外注意事项

  • 防火墙配置:记得在服务器的防火墙(比如iptablesfirewalld)中开放对应的端口:
    • 公网侧:允许x.x.x.x:80的入站流量
    • 内网侧:允许y.y.y.y:1024的入站流量
  • 持久化内容:如果需要保存Apache的网页内容,可以添加-v /your/local/html:/usr/local/apache2/htdocs参数挂载本地目录
  • 已有容器添加网桥:如果是已经运行的容器,可以用以下命令将其加入另一个网桥:
    docker network connect docker_intra your-container-name
    

内容的提问来源于stack exchange,提问作者Dương Quang Thọ

火山引擎 最新活动