不借助 mirror 仓库,为docker engine daemon添加 proxy 访问 docker hub,解决国内公开的docker mirror 仓库不再可用了的问题
我们都知道最近的新闻了
ustc 也早早的就出了一份公告。原始链接 https://mirrors.ustc.edu.cn/help/dockerhub.html
本文不讨论利用 cloudflare workers 加速 docker 镜像站,这种个人用用还是非常不错的,算是感谢 cf 大善人,个人用用非常滴不错,如果你没有一个稳定的 local proxy 的话。
本文将要讨论的是利用 http/https proxy 连接 docker hub,既然我们都用代理访问 google/youtube 了,那么再通过代理访问 docker hub 也是顺理成章的事,只不过这次的事件加速了这样一个【历史进程】。
但是需要知道的是,使用代理连接 docker hub,不是在 linux 终端 export HTTP_PROXY='' 这样就行了的,而是需要给 docker engine 的 daemon 程序显式设置 http 代理。官方文档可参考
https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
可以看到,docker client version 23.0 或更新版本都可以直接编辑 /etc/docker/daemon.json
添加 proxies 对象即可。
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}
我在本地创建的如下,如果当前文件有其他内容,需要注意 json 格式合法性
{
"proxies": {
"http-proxy": "http://10.10.10.242:7890",
"https-proxy": "http://10.10.10.242:7890",
"no-proxy": "127.0.0.0/8"
}
}
保存后重启 docker daemon 即可正常拉取 docker hub 的镜像了。systemctl restart docker
在使用 systemd 的 linux 系统上还可以使用如下方式创建给 docker daemon 使用的代理
注意:不可以创建 /etc/systemd/system/multi-user.target.wants/docker.service.d/http-conf.proxy , 因为经过我的实测这样操作无效。尽管你的 docker.service 文件位于 /etc/systemd/system/multi-user.target.wants/docker.service
正确的路径是 /etc/systemd/system/docker.service.d/http-proxy.conf
mkdir -p /etc/systemd/system/docker.service.d
# 写入 http_proxy 配置
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://10.10.10.242:7890"
Environment="HTTPS_PROXY=http://10.10.10.242:7890"
EOF
systemctl daemon-reload
systemctl restart docker
最终可以通过 docker info
和 systemctl show --property=Environment docker
这两个命令检查,如果有正确的代理配置输出就ok。
重启后执行 docker info
看到如下信息说明 all done
Debug Mode: false
HTTP Proxy: http://10.10.10.242:7890
HTTPS Proxy: http://10.10.10.242:7890
然后就能愉快地拉取 docker hub 上最新的镜像。
请问地址和端口填写什么?是✈️的代理地址和端口嘛?有点搞不懂。请教一下,谢谢。
是的。但是需要搞清楚你的梯子软件暴露的是什么协议的代理,IP 地址建议写机器在局域网的IP,如果docker daemon 和梯子是同一台机器,也不建议填写 127.0.0.1,写机器所在的局域网IP。
至于端口,shadowsocks 那些软件一般是 1080, clash 系一般都是 7890,7891,7890 是 http/https, 7891 一般是 socks5,也有的配置应用了 clash 的 mixed-port 选项。
我填的地址是
http://10.10.10.242:7890
是我局域网的 242 这台机器上,7890这个端口提供了 http 和 https 代理,就是这个意思。