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

如何让RHEL8虚拟机内子网中的Docker容器与外部网络通信?

实现外部设备与RHEL8虚拟机内Docker容器的直接通信

要让Windows主机及外部设备直接访问虚拟机内Docker容器的静态IP,需要完成以下配置:

1. 开启RHEL8虚拟机的IP转发功能

IP转发是让虚拟机能够在外部网络和容器子网之间路由流量的基础:

  • 临时生效:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • 永久生效(重启后仍有效):
    编辑/etc/sysctl.conf,添加或修改以下配置:
    net.ipv4.ip_forward = 1
    
    执行命令使配置立即生效:
    sysctl -p
    

2. 调整Docker的iptables规则,允许外部流量进入容器子网

默认情况下,Docker会拒绝非虚拟机本机的外部流量访问自定义桥接网络内的容器,需要添加规则放行:

  • 先通过ip addr查看虚拟机的物理网卡名称(比如ens33),假设你的容器子网为172.20.0.0/16(替换为你实际的容器子网),执行:
    iptables -I DOCKER-USER -i ens33 -d 172.20.0.0/16 -j ACCEPT
    
  • 若要永久保存iptables规则,执行:
    iptables-save > /etc/sysconfig/iptables
    systemctl enable --now iptables.service
    

3. 配置Windows主机及外部设备的路由表

让外部设备知道容器子网的流量需要转发到RHEL8虚拟机的IP(假设虚拟机在Windows宿主机所在网络的IP为192.168.1.100,容器子网为172.20.0.0/16):

  • Windows主机(以管理员身份打开命令提示符):
    route add 172.20.0.0 mask 255.255.0.0 192.168.1.100 -p
    
    其中-p表示永久添加路由,重启后不会丢失。
  • Linux外部设备:
    ip route add 172.20.0.0/16 via 192.168.1.100
    
  • 其他设备:参考对应系统的路由添加方法,将容器子网的下一跳指向虚拟机IP。

4. 配置RHEL8防火墙放行相关流量

确保RHEL8的firewalld不会阻断外部到容器子网的流量:

firewall-cmd --add-rich-rule='rule family="ipv4" destination address="172.20.0.0/16" accept' --permanent
firewall-cmd --reload

验证连通性

完成以上配置后,在Windows主机或外部设备上ping容器的静态IP,比如ping 172.20.0.10,若能通则说明路由配置生效,再测试外部应用发送数据到容器IP,确认容器能正常接收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:25:53