为Docker配置代理加速镜像拉取
- 概述
- 守护进程配置(推荐长期使用)
- Systemd环境变量配置(适合临时调整)
- 其他
概述
为什么需要配置代理与镜像加速?
跨国网络限制:境外镜像仓库拉取速度慢或无法访问
企业安全策略:通过统一代理服务器进行网络审计和管控
两种代理配置方式对比
配置方式 | 生效范围 | 持久性 | 适用场景 |
---|---|---|---|
daemon.json | 守护进程级别 | 永久生效 | 固定代理服务器 |
Systemd环境变量 | 系统服务级别 | 需reload | 动态调整代理设置 |
参考官方文档:Daemon proxy configuration
守护进程配置(推荐长期使用)
编辑vim /etc/docker/daemon.json
进行配置
{
"proxies": {
"http-proxy": "http://192.168.1.1:7890",
"https-proxy": "http://192.168.1.1:7890",
"no-proxy": "localhost,127.0.0.1,*.test.example.com"
}
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重新启动守护进程以使代理配置生效
# 重载配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证配置
docker info | grep -i proxy
Systemd环境变量配置(适合临时调整)
Docker守护进程会在启动环境中检查以下环境变量,以配置 HTTP 或 HTTPS 代理行为:
HTTP_PROXY
HTTPS_PROXY
NO_PROXY
创建一个名为/etc/systemd/system/docker.service.d
的目录,这种.d
目录下的配置将覆盖默认配置
mkdir -p /etc/systemd/system/docker.service.d
创建一个名为/etc/systemd/system/docker.service.d/http-proxy.conf
的文件
vim /etc/systemd/system/docker.service.d/proxy.conf
添加HTTP_PROXY
环境变量
[Service]
Environment="HTTP_PROXY=http://192.168.1.1:7890/"
Environment="HTTPS_PROXY=http://192.168.1.1:7890/"
# 如果`NO_PROXY=*`,那么所有请求都将不通过代理服务器,如指定本地私有的镜像仓库地址
Environment="NO_PROXY=127.0.0.1,localhost,192.168.*,*.example.com"
重新加载配置文件,重启 Dockerd 才能生效
systemctl daemon-reload
systemctl restart docker
验证环境变量,确认环境变量已经正确配置
systemctl show --property=Environment docker
从docker info
的结果中也可以查看到配置项
# docker info
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http://192.168.1.1:7890
HTTPS Proxy: http://192.168.1.1:7890
No Proxy: 127.0.0.1,localhost
Experimental: false
注意:
若需身份验证,使用
http://用户名:密码@代理IP:端口
格式
临时禁用代理
# 临时禁用代理
sudo systemctl set-environment HTTP_PROXY=""
sudo systemctl restart docker
# 查看实时日志
journalctl -u docker.service -f
其他
代理连通性测试
curl -v -x http://proxy:port https://registry.hub.docker.com
参数说明
-v 参数
作用:开启详细模式(verbose)
-x 参数
全称:--proxy
格式:[协议://]主机:端口
示例:
# curl -v --proxy http://192.168.1.10:7890 https://registry.hub.docker.com
* Trying 192.168.1.10:7890...
* Connected to 192.168.1.10 (192.168.1.10) port 7890
* CONNECT tunnel: HTTP/1.1 negotiated
* allocate connect buffer
* Establish HTTP proxy tunnel to registry.hub.docker.com:443
> CONNECT registry.hub.docker.com:443 HTTP/1.1
> Host: registry.hub.docker.com:443
> User-Agent: curl/8.5.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
代理认证测试
curl -v -x http://user:password@ip:port https://registry.hub.docker.com
绕过代理测试
# curl -v --noproxy '*' https://registry.hub.docker.com
* Host registry.hub.docker.com:443 was resolved.
* IPv6: (none)
* IPv4: 31.13.95.37
* Trying 31.13.95.37:443...