同网络下无root权限Podman容器无法互相连接问题排查
Podman同网络容器端口连接失败及veth对不可见问题排查
问题概述
使用Podman运行容器时,同一自定义bridge网络(my-network)下的容器2无法连接容器1暴露的6379端口,执行连接命令返回"Connection refused";同时以无root权限运行Podman时,主机上看不到veth网络设备,需排查问题原因及解决方向。
环境信息
网络列表
$ podman network ls NETWORK ID NAME DRIVER da3b514ee40c my-network bridge 2f259bab93aa podman bridge
容器1关键配置(podman container inspect截取)
"SandboxKey": "/run/user/1000/netns/netns-447e75e3-aa0e-6449-1c45-33c4af3baf84", "Networks": { "my-network": { "Gateway": "10.89.0.1", "IPAddress": "10.89.0.24", "Aliases": [ "database", "b81cd9ab1544" ] } }, "NetworkMode": "bridge", "PortBindings": { "6379/tcp": [ { "HostIp": "127.0.0.1", "HostPort": "6379" } ] }
容器2关键配置(podman container inspect截取)
"SandboxKey": "/run/user/1000/netns/netns-c9ad66f3-d49d-d49a-4563-2de551197891", "Networks": { "my-network": { "Gateway": "10.89.0.1", "IPAddress": "10.89.0.38", "Aliases": [ "49b7b13c02e7" ] } }
测试命令及结果
[root@49b7b13c02e7 /]# nc -z -v 127.0.0.1 6379 Ncat: Connection refused.
排查方向
修正容器间连接目标
当前容器2使用127.0.0.1:6379连接,指向的是容器2自身的回环地址,而非容器1。应改用容器1的IP(10.89.0.24)或网络别名(database)进行测试:nc -z -v 10.89.0.24 6379 # 或使用别名 nc -z -v database 6379验证容器1端口监听状态
进入容器1,确认服务是否真的在监听6379端口,且监听地址不是仅127.0.0.1(若服务仅绑定回环地址,容器间无法通过容器IP访问):podman exec -it <容器1ID> ss -tulpn | grep 6379澄清端口映射的作用
容器1的PortBindings是将容器6379端口映射到主机的127.0.0.1:6379,仅用于主机访问容器服务,容器间通信不需要依赖端口映射,直接使用容器内部端口即可。无root模式下查看veth对的正确方式
无root权限运行Podman时,网络命名空间属于用户级,主机默认无法看到veth设备,需切换到对应容器的网络命名空间查看:- 从容器的
SandboxKey获取网络命名空间路径,如容器1的路径为/run/user/1000/netns/netns-447e75e3-aa0e-6449-1c45-33c4af3baf84 - 使用以下命令查看该命名空间内的veth设备:
ip netns exec netns-447e75e3-aa0e-6449-1c45-33c4af3baf84 ip link # 或使用nsenter nsenter --net=/run/user/1000/netns/netns-447e75e3-aa0e-6449-1c45-33c4af3baf84 ip link
- 从容器的
验证自定义网络连通性
在容器2中ping容器1的IP或别名,确认基础网络是否连通:ping 10.89.0.24 # 或使用别名 ping database若ping不通,检查自定义网络配置:
podman network inspect my-network确认子网、网关配置正常,同时排查主机防火墙是否拦截了容器间的网络流量。
检查无root模式网络配置
确认用户专属的网络命名空间是否正常创建:ls /run/user/1000/netns/查看用户级bridge设备是否存在:
ip link show
内容的提问来源于stack exchange,提问作者mSatyam
相关产品推荐
相关产品推荐

