Docker的代理服务器设置

配置Docker容器和守护进程使用代理服务器

前言

最近国内各大 Docker Hub 镜像源陆陆续续的停止服务或源更新慢等情况,导致镜像的拉取体验非常非常的糟糕,只在 /etc/docker/daemon.json 内设置 registry-mirrors 选项目前解决不了我的问题,所以经过一番折腾,直接挂代理使用才让我用的舒心😌

以下方式都是针对 Docker Engine 的配置,Docker Desktop 在对应的可视化界面配置即可

设置守护进程使用代理 1

编辑配置

配置 daemon.json 的方式

该方式需要 Docker Engine 版本为 23.0 或更高

/etc/docker/daemon.json 文件内加入以下配置:

1
2
3
4
5
6
7
{
    "proxies": {
        "http-proxy": "http://proxy.example.com:3128",
        "https-proxy": "https://proxy.example.com:3129",
        "no-proxy": "*.test.example.com,.example.org,localhost,127.0.0.0/8"
    }
}

没有该文件的直接新建,将其中的示例地址换成自己的代理服务器地址就可以了,其中 no-proxy 配置项中填写不想使用代理服务器的地址,比如公司内网地址或自建的registry地址等等

配置 systemd service 的方式

/etc/systemd/system/docker.service.d/http-proxy.conf 文件内加入以下配置,没有该文件(夹)的直接新建即可:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3129"
Environment="NO_PROXY=localhost,127.0.0.0/8"

其中的变量含义同 daemon.json 内的一样

应用配置

按照上方方式之一配置好后,需要重启Docker进程使之生效,命令如下:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

使用 docker info 命令,在输出的文本内有类似输出即为成功:

1
2
3
HTTP Proxy: http://xxx
HTTPS Proxy: http://xxx
No Proxy: xxx,xxx

启用地址为你配置的地址,选项数量即为你配置的那几个,然后使用 docker pull 就会走代理啦!

设置容器使用代理 2

容器代理顾名思义就是给运行的容器内设置代理,容器内的请求就可以走代理了

配置方式

在Docker client配置文件 ~/.docker/config.json 内加入如下内容:

1
2
3
4
5
6
7
8
9
{
 "proxies": {
   "default": {
     "httpProxy": "http://proxy.example.com:3128",
     "httpsProxy": "https://proxy.example.com:3129",
     "noProxy": "*.test.example.com,.example.org,localhost,127.0.0.0/8"
   }
 }
}

没有该文件的手动新建即可,保存配置后无需重启Docker,注意的是配置后只对新建的容器、构建生效,已存在容器不受影响。

可用的配置参数及说明:

参数名描述
httpProxySets the HTTP_PROXY and http_proxy environment variables and build arguments.
httpsProxySets the HTTPS_PROXY and https_proxy environment variables and build arguments.
ftpProxySets the FTP_PROXY and ftp_proxy environment variables and build arguments.
noProxySets the NO_PROXY and no_proxy environment variables and build arguments.
allProxySets the ALL_PROXY and all_proxy environment variables and build arguments.

再就是使用运行容器时传入 --env-e 对应的环境变量参数方式,这里不细说了,比较常见。

注:以上所有配置中设置的代理服务器地址也支持 SOCKS 代理协议,设置格式为 socks5://host:port

以上就是通过网络搜索结果结合官方文档得出的配置方式,更多详情参阅官方文档,希望该教程能帮助到有同样问题的小伙伴~

Written in ❤
使用 Hugo 构建
主题 StackJimmy 设计