如何为Podman rootless容器同时配置可用的内部与外部网络
可以同时实现rootless Podman容器的内部网络互通与外部网络访问,针对你使用的3.3.1版本,按以下步骤配置即可:
1. 调整宿主机内核参数
执行以下命令配置必要内核参数,永久生效:
# 开启IP转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # 放宽反向路径过滤 echo "net.ipv4.conf.all.rp_filter = 2" >> /etc/sysctl.conf # 允许普通用户组容器发送ICMP ping包,替换范围为包含你的用户GID的区间 echo "net.ipv4.ping_group_range = 0 200000" >> /etc/sysctl.conf # 加载配置 sysctl -p
2. 重建自定义容器网络
你当前的container-net未开启网关与地址伪装,导致出站请求无法转发,删除原有网络后用以下命令重建:
# 删除旧网络 podman network rm container-net # 新建带网关、SNAT伪装、dnsname解析的网络 podman network create \ --opt is_gateway=true \ --opt masquerade=true \ --opt dnsname.enabled=true \ container-net
执行podman network inspect container-net确认返回结果中options字段包含上述配置即可。
3. 修正Pod与容器启动参数
加入Pod的容器默认共享Pod的网络命名空间,不需要在podman run时重复指定--network参数,冗余配置可能引发网络冲突:
- 新建Pod的命令无需修改
- 修正
start-test.sh内容如下:
podman run --rm -it \ --pod test-pod \ --dns-search dns.podman \ --name test-01 \ --network-alias test-01 \ docker.io/alpine /bin/sh
4. 放行防火墙规则
如果宿主机开启了firewalld服务,需放行容器网段的转发请求:
# 先查看container-net的网段,替换下方10.89.0.0/24为实际网段 firewall-cmd --add-source=10.89.0.0/24 --zone=trusted --permanent firewall-cmd --reload
验证效果
按上述配置调整后,重新创建Pod并启动容器,此时:
- 同网络下的容器可通过
network-alias互相访问 - 容器可正常ping通8.8.8.8等外部地址
内容的提问来源于stack exchange,提问作者Gerben Venekamp
相关产品推荐
相关产品推荐

