Podman容器无法通过主机名互访问题求助
Podman自定义网络容器主机名解析失败问题
问题背景
两个Podman容器通过自定义bridge网络连接,可通过IP互通,但无法解析彼此主机名。容器已配置正确的网络别名,但DNS查询显示容器使用主机DNS而非Podman内置DNS服务。
复现配置
--- version: "3" services: app1: image: docker.io/wbitt/network-multitool:latest container_name: app1 networks: - internal-network app2: image: docker.io/wbitt/network-multitool:latest container_name: app2 networks: - internal-network networks: internal-network: driver: bridge
容器网络详情
App1
"Networks": { "network-issue_internal-network": { "IPAMConfig": null, "Links": null, "Aliases": [ "4d2425e5c3e5", "app1" ], "NetworkID": "network-issue_internal-network", "EndpointID": "", "Gateway": "10.88.4.1", "IPAddress": "10.88.4.27", "IPPrefixLen": 24, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "86:d1:52:53:84:b3", "DriverOpts": null } }
App2
"Networks": { "network-issue_internal-network": { "IPAMConfig": null, "Links": null, "Aliases": [ "3f6ed535b139", "app2" ], "NetworkID": "network-issue_internal-network", "EndpointID": "", "Gateway": "10.88.4.1", "IPAddress": "10.88.4.26", "IPPrefixLen": 24, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "fe:1f:cf:e7:80:52", "DriverOpts": null } }
自定义网络配置
[ { "args": { "podman_labels": { "com.docker.compose.network": "internal-network", "com.docker.compose.project": "network-issue", "com.docker.compose.version": "1.25.0" } }, "cniVersion": "0.4.0", "name": "network-issue_internal-network", "plugins": [ { "bridge": "cni-podman2", "hairpinMode": true, "ipMasq": true, "ipam": { "ranges": [ [ { "gateway": "10.88.4.1", "subnet": "10.88.4.0/24" } ] ], "routes": [ { "dst": "0.0.0.0/0" } ], "type": "host-local" }, "isGateway": true, "type": "bridge" }, { "capabilities": { "portMappings": true }, "type": "portmap" }, { "backend": "", "type": "firewall" }, { "type": "tuning" } ] } ]
DNS查询结果(app2内查询app1)
# dig app1 ; <<>> DiG 9.16.22 <<>> app1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 3565 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1280 ;; QUESTION SECTION: ;app1. IN A ;; AUTHORITY SECTION: . 1356 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2022100302 1800 900 604800 86400 ;; Query time: 0 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Tue Oct 04 00:12:49 UTC 2022 ;; MSG SIZE rcvd: 108
环境信息
- 系统:Raspbian GNU/Linux 11
- Podman版本:3.0.1
解决方案
1. 确保podman-dnsname服务运行
Podman的容器名解析依赖podman-dnsname服务,检查并启动服务:
systemctl status podman-dnsname systemctl start podman-dnsname systemctl enable podman-dnsname
2. 为自定义网络添加dnsname插件
当前网络配置缺少dnsname CNI插件,需重新创建网络并启用DNS解析:
# 删除原有网络 podman network rm network-issue_internal-network # 创建带DNS支持的bridge网络 podman network create --driver bridge --dns-enable internal-network
或修改docker-compose.yml中的网络配置,启用DNS:
networks: internal-network: driver: bridge dns_enabled: true
3. 重启容器使配置生效
docker-compose down docker-compose up -d
4. 验证容器DNS配置
进入容器检查DNS服务器是否指向Podman网络网关(如10.88.4.1):
podman exec app2 cat /etc/resolv.conf
若显示DNS为192.168.1.1(主机DNS),需确认网络配置已正确添加dnsname插件。
内容的提问来源于stack exchange,提问作者Dracs
相关产品推荐
相关产品推荐

