docker pull 卡住(代理问题) 的解决方案

本文最后更新于 2024年6月17日 凌晨

被这个问题解决了一晚上, 已经没有心思吐槽了, 直接简洁易懂的介绍方法以及为什么配置环境变量不起作用

出现问题复现

1
docker pull xx

这个命令一直卡死, 如果继续跟踪报错, 出现:

1
Error response from daemon: Get "https://registry-1.docker.io/v2/" xxx

很显然是被 Q 了的原因

尝试的无效方案

使用:

1
export http_proxy="xx"

无法解决

使用系统级代理 proxychains 无法解决

使用官方的代理配置方案: https://docs.docker.com/network/proxy/

在本地 ~/.docker/config.json 配置无效

解决方案

在执行docker pull时,是由守护进程dockerd来执行。 因此,代理需要配在dockerd的环境中。 而这个环境,则是受systemd所管控,因此实际是systemd的配置。

而上述方案以及官方提供的解决思路解决的是 容器运行时 的代理配置

而修改 systemd 的代理需要使用这个文档中的 proxy: https://docs.docker.com/config/daemon/systemd/

步骤

下面直接复述解决方案:

1
2
sudo mkdir -p /etc/systemd/system/docker.service.d 
sudo vim /etc/systemd/system/docker.service.d/proxy.conf

添加:

1
2
[Service] 
Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/" Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

然后重启 docker daemon:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

即可完成 docker pull

不推荐的解决方案

配置镜像 registry, 实测一堆莫名其妙的 bug


docker pull 卡住(代理问题) 的解决方案
https://moreality.net/posts/45709/
作者
Moreality
发布于
2023年10月31日
许可协议