使用代理拉取 Docker Hub 镜像

前言

  • 2023 年 5 月,Docker Hub 在中国大陆无法访问;
  • 2024 年 6 月,国内的 Docker Hub 镜像皆因「不可抗力」、「接上级要求」关闭。

目前在国内没办法直接访问 Docker Hub,也没有可靠镜像站点。为了保证生产效率和稳定,能直接用代理解决访问问题是效率最高的方法。

直接代理全部流量是一种选择,但是这对分流规则的细度要求太高,服务器上的很多其他大流量应用如果没能被正确分流,代理流量可能就都被浪费了,所以我们要单独对 Docker 拉取镜像的操作进行代理设置。

具体操作

切换到 root 用户:

1
sudo -i

创建相关目录/文件:

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

http-proxy.conf 中输入以下内容,注意修改代理地址:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://192.168.1.2:7890"
Environment="HTTPS_PROXY=http://192.168.1.2:7890"
Environment="NO_PROXY=localhost,127.0.0.1"

重启相关服务:

1
systemctl daemon-reload && systemctl restart docker

验证:

1
sudo systemctl show --property=Environment docker

附:群晖(DSM 7.0+)操作方法

群晖进行了一些魔改,主要是名字上的区别(Docker 变成了 Container Manager)

切换到 root 用户:

1
sudo -i

创建相关目录/文件:

1
2
mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
vim /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf

http-proxy.conf 中输入以下内容,注意修改代理地址:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://192.168.1.2:7890"
Environment="HTTPS_PROXY=http://192.168.1.2:7890"
Environment="NO_PROXY=localhost,127.0.0.1"

重启相关服务:

1
systemctl daemon-reload && systemctl restart pkg-ContainerManager-dockerd.service

验证:

1
systemctl show --property=Environment pkg-ContainerManager-dockerd.service