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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:55:21