在国内使用 Docker 时,镜像拉取慢、超时甚至完全失败是家常便饭。Docker Hub 对未登录用户有每 6 小时 100 次 pull 的限制,加上国内网络访问海外仓库的高延迟,让 docker pull 成了开发效率的杀手。本文从网络代理和镜像站两个维度,提供完整的 Docker 加速配置方案。
一、网络代理方案
如果你的网络环境需要通过代理服务器访问外网(如企业内网),可以配置 Docker 守护进程使用代理。Docker 提供了两种配置方式,推荐使用 daemon.json 方式。
1.1 方式一:通过 daemon.json 配置(推荐)
Docker 从 23 版本开始支持在 daemon.json 中配置代理。编辑 /etc/docker/daemon.json 文件:
{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "http://proxy.example.com:3128",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
}关键说明:即使配置的是 https-proxy,代理 URL 通常也使用 http:// 协议——因为客户端与代理服务器之间的连接本身是 HTTP,HTTPS 流量通过 CONNECT 方法隧道传输。
配置完成后重启 Docker 服务使配置生效:
sudo systemctl restart docker1.2 方式二:通过 systemd 环境变量配置
对于使用 systemd 管理的 Docker 服务,可以创建 drop-in 文件设置环境变量:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://proxy-server:8080"
Environment="HTTPS_PROXY=http://proxy-server:8080"
Environment="NO_PROXY=localhost,127.0.0.1,.internal"
EOF然后重载并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker验证代理配置是否生效:
systemctl show --property=Environment docker | grep -i proxy1.3 容器内代理配置
如果需要容器内运行的应用程序也使用代理,可以在启动容器时注入环境变量:
docker run -e HTTP_PROXY=http://proxy-server:8080 \
-e HTTPS_PROXY=http://proxy-server:8080 \
your-image1.4 Docker Desktop 用户
如果你使用的是 Docker Desktop(macOS/Windows),上述 daemon.json 中的代理配置会被忽略。需通过 Docker Desktop 的图形界面设置:Settings → Proxies 中配置 HTTP/HTTPS 代理。
二、镜像站方案(镜像加速器)
镜像站方案通过配置 registry-mirrors,让 Docker 在拉取镜像时自动将请求转发到国内镜像仓库,从而大幅提升拉取速度。实测显示,配置镜像加速器可使镜像拉取速度提升 3-5 倍。
2.1 配置方法
编辑 /etc/docker/daemon.json 文件,添加 registry-mirrors 字段:
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}配置完成后重启 Docker:
sudo systemctl restart docker验证镜像源配置是否生效:
docker info | grep -A 5 "Registry Mirrors"正常输出应显示所有配置的镜像源地址。
2.2 2026 年实测可用的镜像源
⚠️ 注意:中科大(USTC)、网易、上海交大等镜像源在 2024–2025 年已陆续停服,老博客上的清单大多已过期,不要直接复制。
以下是 2026 年实测可用的镜像源:
配置建议:建议配置 2-3 个镜像源作为备用,避免单点故障。
2.3 Docker Desktop 用户
macOS/Windows 的 Docker Desktop 用户,在 Settings → Docker Engine 中编辑 JSON 配置即可。
三、镜像站信任配置(insecure-registries)
当你使用非 HTTPS 的镜像仓库(如内网自建的 HTTP Registry)或使用自签名证书的私有仓库时,Docker 默认会拒绝连接。此时需要配置 insecure-registries 让 Docker 信任这些仓库。
3.1 配置方法
编辑 /etc/docker/daemon.json,添加 insecure-registries 字段:
{
"insecure-registries": ["192.168.1.100:5000"]
}如果需要同时配置镜像加速和私有仓库信任,可以合并配置:
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run"
],
"insecure-registries": [
"192.168.1.100:5000",
"my-registry.internal:5000"
]
}配置完成后重启 Docker:
sudo systemctl restart docker验证配置是否生效:
docker info 2>/dev/null | grep -A5 "Insecure Registries"3.2 安全注意事项
仅限测试环境:
insecure-registries允许通过 HTTP 协议访问非加密仓库,生产环境应优先使用 HTTPS。不要使用
0.0.0.0/0:虽然配置0.0.0.0/0可以信任所有非 HTTPS 地址,但极度不安全,生产环境严禁使用。生产环境建议:给私有仓库配置合法的 TLS 证书,或使用自签名证书并导入 CA,而不是依赖
insecure-registries。
四、总结
三种方案可以组合使用。例如,在内网环境中可以同时配置代理和镜像站,让 Docker 通过代理访问国内镜像站,实现双重加速。
最后提醒:镜像源列表变化较快,建议定期关注社区最新实测结果,及时更新配置。