podman 无法登录docker
Podman 登录docker
问题描述
前置环境:clash 设置为系统代理
在启动podman machine default 后,尝试登录docker.io提示连接出现EOF.
Error: authenticating creds for "docker.io": pinging container registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": unexpected EOF
问题排查
错误分析&定位:
错误核心信息: unexpected EOF (意外的文件结束)
发生在哪一步: pinging container registry registry-1.docker.io (正在尝试连接容器注册中心 registry-1.docker.io)
完整含义: Podman 尝试通过 HTTPS 协议连接到 Docker 官方仓库(registry-1.docker.io)以进行认证,但在建立安全连接(SSL/TLS 握手)的过程中,连接意外地中断或关闭了,导致 Podman 收到一个“意外的文件结束”信号,无法完成通信。
尝试解决问题
TRY1(失败)
# in pc shell
podman machine ssh
# in podman machine
curl -v https://registry-1.docker.io/v2/
# 运行结果
Trying 192.168.x.x:7897...
* Connected to 192.168.x.x (192.168.x.x) port 7897
* CONNECT tunnel: HTTP/1.1 negotiated
* allocate connect buffer
* Establish HTTP proxy tunnel to registry-1.docker.io:443
> CONNECT registry-1.docker.io:443 HTTP/1.1
> Host: registry-1.docker.io:443
> User-Agent: curl/8.9.1
> Proxy-Connection: Keep-Alive
>
* Proxy CONNECT aborted
* closing connection #0
abort: 代理可以接受但是访问网页出现了拒绝(registry-1.docker.io:443.)。
考虑到clash设置为系统代理(猜测会映射到主机网路),因此尝试将代理设置为127.0.0.1,但并没有啥用,查了下,实际上并没有映射到主机的用户网络。
TRY2(成功)
尝试machine 使用用户网络
查找资料 发现 创建机器市 有 使用用户网络 的选项
podman-machine-init — Podman 文档 --- podman-machine-init — Podman documentation
–user-mode-networking
这个选项只能在 Windows 上的 WSL 提供者中使用。在其他所有 平台此选项被忽略,用户模式网络将始终 true 因此在这里,因为这些提供者总是依赖于 gvproxy(我们为虚拟机提供的用户模式网络工具)
与 Windows/WSL 后端默认的 false 不同,它遵循标准的 WSL 网络设置。在 Windows/WSL 上将此设置更改为 true 会通知 Podman 在启动此机器实例时用用户模式网络分布替换 WSL 网络设置。由于 WSL 在各个发行版之间共享相同的内核,因此所有其他运行的发行版都会重用此网络。同样,当最后一个具有 true 设置的机器实例停止时,会恢复原始网络设置。
在某些 VPN 配置中,VPN 可能会丢弃来自备用网络接口的流量,包括虚拟机网络设备。通过启用用户模式网络,VPN 可以观察到所有 Podman 机器流量都来自主机,从而绕过问题。
设置完成后,重新进行 docker 登录和 镜像拉起 成功 ✌

浙公网安备 33010602011771号