既然有佬友在问,那我就简单写个教程吧(也算是使用Docker镜像源无法使用的备用方案了)
运行时(docker run
)代理
如果是运行时代理,那在docker run 的时候加上 HTTP_PROXY
和 HTTPS_PROXY
的环境变量即可。例如 docker run -it --env HTTP_PROXY="http://172.17.0.1:7890" --env HTTPS_PROXY="http://172.17.0.1:7890" ubuntu:latest env
构建时(docker build
)代理
如果是构建时的代理,就比较麻烦了。因为拉取那一步不会走代理/镜像(可能是Bug,在docker 27.0.1雀食不走),如果拉取,仅需要构建的时候有代理,那就一样加上 HTTP_PROXY
和 HTTPS_PROXY
的环境变量即可。例如 docker build --build-arg HTTP_PROXY="http://172.17.0.1:7890" --build-arg HTTPS_PROXY="http://172.17.0.1:7890" .
构建时的拉取代理可以参考全局代理。
拉取时(docker pull
)代理
拉取时的代理,一种是常见的,配置镜像。另一种是配置 Docker Daemon 的代理环境变量
全局代理
配置 Docker Daemon 的代理环境变量, 这种方式会使上面三种行为都走代理,可以通过两种方式配置,两种方式任选其一就行。
方式一
在 /etc/docker/daemon.json
加入下面的内容即可
// 记得去掉注释
{
"proxies": {
"http-proxy": "http://172.17.0.1:7890",
"https-proxy": "http://172.17.0.1:7890",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8" // 不走代理的域名/IP范围
}
}
配置完之后 systemctl docker restart
即可
方式二
配置服务Unit启动环境变量
sudo mkdir -p /etc/systemd/system/docker.service.d
创建文件 /etc/systemd/system/docker.service.d/http-proxy.conf
,并写入下面的内容
[Service]
Environment="HTTP_PROXY=http://172.17.0.1:7890"
Environment="HTTPS_PROXY=http://172.17.0.1:7890"
Environment="NO_PROXY=*.test.example.com,.example.org,127.0.0.0/8"
然后重载服务配置,重启docker服务即可
sudo systemctl daemon-reload
sudo systemctl restart docker
参考资料
注意
172.17.0.1
为容器内部访问宿主机的IP映射,具体可能因为docker网段设置不一样导致无法使用,请具体情况具体分析