本文最后更新于 2024-09-11,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。

前情提要

在上一篇文章 https://blog.imbhj.com/archives/wurrA07U 中我们说到 docker pull 命令是由单独的守护程序来执行的,只配置简单的环境变量 http/s_proxy 是没有用的,需要给 Docker 单独设置

解决办法

首先创建配置文件的文件夹:

sudo mkdir -p /etc/systemd/system/docker.service.d

创建并编辑配置文件:

sudo vim /etc/systemd/system/docker.service.d/proxy.conf

输入配置:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:port"
Environment="HTTPS_PROXY=http://proxy.example.com:port"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

需要保留 http:// 前缀

重启 docker 服务: sudo systemctl restart docker

这样在执行 docker pull 的时候就可以直接走代理啦,如果还是不行的话,那么建议关闭 ipv6访问,强制使用ipv4试试。

另外一种方法

sudo vim /etc/docker/daemon.json

{
	"registry-mirrors": [
		"https://dockerhub.icu",
		"https://docker.registry.cyou",
		"https://docker-cf.registry.cyou",
		"https://dockercf.jsdelivr.fyi",
		"https://docker.jsdelivr.fyi",
		"https://dockertest.jsdelivr.fyi",
		"https://mirror.aliyuncs.com",
		"https://dockerproxy.com",
		"https://mirror.baidubce.com",
		"https://docker.m.daocloud.io",
		"https://docker.nju.edu.cn",
		"https://docker.mirrors.sjtug.sjtu.edu.cn",
		"https://docker.mirrors.ustc.edu.cn",
		"https://mirror.iscas.ac.cn",
		"https://docker.rainbond.cc"
	],
    "proxies": {
        "http-proxy": "http://10.10.10.51:10809",
        "https-proxy": "http://10.10.10.51:10809",
        "no-proxy": "localhost,127.0.0.1"
    }
}

重启 docker 服务: sudo systemctl restart docker

查看是否生效:docker info| grep Proxy