我们都知道最近的新闻了

docker hub 国内mirror仓库不再可用.jpg

ustc 也早早的就出了一份公告。原始链接 https://mirrors.ustc.edu.cn/help/dockerhub.html

ustc docker mirror 仓库关停公告.jpg

本文不讨论利用 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 infosystemctl 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 上最新的镜像。