实现一个宿主机两个不通网桥的上的容器的互通 容器A内部访问容器B的容器名以及端口 容器A内部用宿主机ip+B容器端口映射的端口访问容器B 反之亦然
要实现宿主机上两个不同网桥(Docker Network)中容器的互通,核心思路是通过Linux iptables 规则打通两个网桥的网络隔离,并结合端口映射 / 容器名解析实现双向访问。以下是完整、可落地的实现方案。一、前置准备(明确网络环境)假设你的环境如下(请替换为实际值):表格名称信息网桥 1名称:net-1,子网:172.18.0.0/16容器 A(net-1)名称:container-a,IP:172.18.0.2网桥 2名称:net-2,子网:172.19.0.0/16容器 B(net-2)名称:container-b,IP:172.19.0.2宿主机 IP192.168.1.100(外网 / 内网 IP 均可)容器 B 映射端口宿主机8080→ 容器 B80(示例)二、核心实现步骤步骤 1:打通两个网桥的 iptables 隔离(关键)Docker 默认会为不同网桥添加DOCKER-ISOLATION-NS-xxx相关规则隔离网络,需手动添加允许两个网桥互通的规则:bash运行# 1. 允许 net-1 子网访问 net-2 子网(双向) iptables -I DOCKER-ISOLATION-STAGE-1 -i br-net-1 -o br-net-2 -j ACCEPT iptables -I DOCKER-ISOLATION-STAGE-1 -i br-net-2 -o br-net-1 -j ACCEPT # 2. 允许两个网桥的转发规则(确保内核转发开启) iptables -I FORWARD -s 172.18.0.0/16 -d 172.19.0.0/16 -j ACCEPT iptables -I FORWARD -s 172.19.0.0/16 -d 172.18.0.0/16 -j ACCEPT # 3. 开启内核IP转发(永久生效) echo "net.ipv4.ip_forward=1" /etc/sysctl.conf sysctl -p说明:br-net-1/br-net-2是 Docker 网桥对应的宿主机虚拟网卡(可通过ip link show查看);