让 Docker Cli 使用代理拉取镜像
一、背景
自从某年某月某日起,ZG大陆跟 hub.docker.com 完全隔绝关系后(原因未明),就无法直接使用 docker pull 从官方镜像库来拉取镜像了,国内的很多镜像源也都纷纷自觉关闭。虽然国内出现了可信镜像中心,如:AtomHub 可信镜像仓库平台 。但是如我猜测的那样,由于需要「可信」,所以镜像数量和更新力度,肯定没有官方仓库全面。说白了,就跟 Google Play 和国内的众多 AppStore 的情况一样。
刚开始无法访问时的讨论
二、设置方法
所以,逼不得已的情况下,只能通过代理的方式,先从 dockerhub 上拉取镜像,然后通过本地镜像库,分给各系统使用。废话不多说了,具体操作如下:
1、搭建本地镜像库
这个之前已经分享过,详见《Harbor 安装简记》和《Harbor 安装过程中问题小记》。
2、准备能访问 dockerhub 的代理
略。
3、配置 docker cli
(1)还原官方镜像源
gxjtcdc@UBT:~$ more /etc/docker/daemon.json
{
"registry-mirrors": [
"https://hub.docker.com/"]
}
gxjtcdc@UBT:~$
(2)配置 docker cli 代理
在执行 docker pull 时,是由守护进程 dockerd 来执行。因此,代理需要配在 dockerd 的环境中。而这个环境,则是受 systemd 所管控,因此实际是 systemd 的配置。
以上这段话是从网上摘录的,目前官方文档找不到相关说明,不过我配置了 daemon.json 确实不生效,最终还是配置了 systemd 的配置才生效。
具体如下:
gxjtcdc@UBT:~$ more /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.116.128:7899"
Environment="HTTPS_PROXY=http://192.168.116.128:7899"
gxjtcdc@UBT:~$
找不到文件夹的新建文件夹,找不到文件的新建文件。
需要注意的是,如果你的代理不支持 https,请把 HTTPS_PROXY
链接设置成 http,我曾因为这个被耽误了好久……
修改完成后,执行以下命令刷新:
sudo systemctl daemon-reload;
sudo systemctl restart docker;
4、打完收工
配置完成后,即可正常拉取镜像