Podman运行容器时持续请求已退出的本地8001代理导致连接报错
在localhost:8001端口部署了代理服务,完全关闭该代理后,执行Podman run命令仍出现报错:
podman run --log-level=trace \ -p 9000:9000 \ -p 9001:9001 \ minio/minio server /data --console-address ":9001" Error: initializing source docker://minio/minio:latest: pinging container registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 127.0.0.1:8001: connect: connection refused
- 操作系统:MacOS Monterey 12.3.1
- Docker Desktop 版本:4.10.0 (82025)
内置组件版本:- Engine: 20.10.17
- Compose: 1.29.2
- Credential Helper: v0.6.4
- Kubernetes: v1.24.1
- Snyk: v1.827.0
- Podman 版本:4.1.1
- 在Docker中显式设置代理,测试确认代理本身可正常工作,但指定8001端口时代理不生效

- 参考公开issue方案,显式设置为「手动代理」模式并清空所有代理配置项,执行命令后Podman仍尝试请求8001端口代理

Podman和Docker Desktop是两套完全独立的容器运行时,二者配置不互通,修改Docker Desktop的代理设置不会对Podman生效。报错的核心原因是Podman读取到了其他位置残留的8001端口代理配置,配置来源通常是宿主机shell环境变量、Podman Machine虚拟机内部环境变量、容器注册中心配置文件、macOS系统网络代理设置四个位置。
1. 清理宿主机残留代理环境变量
在执行podman命令的终端执行以下命令,检查是否存在指向8001端口的代理配置:
env | grep -i proxy
如果输出包含HTTP_PROXY/HTTPS_PROXY/ALL_PROXY等变量指向127.0.0.1:8001,先执行命令临时清除当前终端的代理变量:
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy NO_PROXY no_proxy
要永久清除,检查~/.zshrc、~/.bash_profile、~/.bashrc、~/.profile几个shell配置文件,删除其中写死的8001端口代理export语句,执行source 对应配置文件路径让修改生效。
2. 清理Podman Machine虚拟机内部的代理配置
macOS上的Podman依赖Linux虚拟机运行,虚拟机内部残留的代理配置不会因为宿主机关代理就自动消失。
执行以下命令进入Podman虚拟机:
podman machine ssh
进入虚拟机后执行命令检查代理变量:
sudo env | grep -i proxy
如果存在8001端口的代理配置,直接删除虚拟机内的代理配置文件(通常该文件是手动配置代理时生成的):
sudo rm -f /etc/profile.d/proxy.sh
执行exit退出虚拟机,重启Podman虚拟机让配置生效:
podman machine stop podman machine start
3. 清理容器注册中心配置的硬编码代理
分别检查宿主机和Podman虚拟机内的registries配置文件,确认没有硬编码的代理地址:
- 宿主机配置路径:
~/.config/containers/registries.conf - 虚拟机内配置路径:
/etc/containers/registries.conf
如果文件中存在proxy = "http://127.0.0.1:8001"类似的配置行,直接删除或注释该行,重启Podman即可。
4. 检查macOS系统级代理设置
打开系统设置-网络-当前连接的网络-代理,检查是否手动开启了HTTP/HTTPS代理并指向8001端口,如果是直接关闭对应代理开关,保存配置后重试。
内容的提问来源于stack exchange,提问作者addlistener

