【教程】Docker 多种代理配置的方法

既然有佬友在问,那我就简单写个教程吧(也算是使用Docker镜像源无法使用的备用方案了

运行时(docker run)代理

如果是运行时代理,那在docker run 的时候加上 HTTP_PROXYHTTPS_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_PROXYHTTPS_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

参考资料

  1. Docker Docs

注意

  1. 172.17.0.1 为容器内部访问宿主机的IP映射,具体可能因为docker网段设置不一样导致无法使用,请具体情况具体分析
17 个赞

强啊兄弟

感谢分享 有无推荐代理 :tieba_087:

感谢大佬教程

感谢大佬教程

2 个赞