最近在云服务器上使用docker的时候遇到一些镜像配置了代理也拉取不下来的状况,总结了一下解决办法
Docker Hub在国内有镜像代理,比如阿里云,轩辕镜像,但不在Docker Hub的一些镜像比如ghcr.io等等没有镜像代理的就需要其他方式pull,尤其是24年国内各大公共 Docker 镜像站发生了一次大规模的“关停潮”或“白名单化”。
方式一 ( 推荐)
如果你本地计算机上有科学上网,可以把科学上网共享给云服务器
第一步:首先在你的科学上网软件上找到它监听的 HTTP/Socks5 端口号,通常是7890

第二步:在 Windows 上建立 SSH 隧道
在你的 CMD(或者 PowerShell)里执行这条命令。
(请把 <你的云服务器IP> 替换成真实的 IP 地址)
ssh -R 127.0.0.1:8888:127.0.0.1:7890 root@<你的云服务器IP>
第三步:在云服务器上配置 Docker
连接上 SSH 后,在云服务器的黑窗口里复制粘贴下面的命令(一次性粘贴进去回车即可):
# 1. 创建配置文件夹
sudo mkdir -p /etc/systemd/system/docker.service.d
# 2. 写入代理配置(告诉 Docker 去找 8888 端口)
cat <<EOF | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8888"
Environment="HTTPS_PROXY=http://127.0.0.1:8888"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF
# 3. 重启 Docker 让配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
第四步:拉取镜像
现在,你直接拉取镜像应该就能成功了:
docker pull ghcr.io/xxxx/xxxx
第五步:用完之后复原
当你拉取完镜像,断开 SSH 连接后,这根“管子”就断了。如果你不把 Docker 的配置改回来,下次 Docker 可能会因为连不上代理而报错。
清理命令(在云服务器上执行):
# 删除代理配置
sudo rm /etc/systemd/system/docker.service.d/http-proxy.conf
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
方法二
如果你本地有DockerDesktop 和科学上网,可以直接把镜像下载到本地然后打包上传到云服务器
因为DockerDesktop下载较为繁琐,这种方式感兴趣可以自行查询,更推荐方式一