Docker镜像加速

2026-07-22 11:29:00
3109字
17.3分钟
Docker安装完成后默认的官方镜像仓库是Docker Hub‌,这是Docker官方维护的公共镜像注册中心。但对于国内Docker用户而言,在没有魔法的情况下是无法访问Docker Hub网站的,也无法从Docker Hub仓库拉取镜像。目前国内常用的2种方法:Docker镜像加速源配置Docker代理

1. 默认镜像仓库

  • ‌官方默认地址‌: Docker官方默认镜像仓库Docker Hub的底层拉取服务地址为 registry-1.docker.io,这是Docker客户端默认发起镜像拉取请求的目标地址。registry-1.docker.io 是 Docker Hub 的底层注册表(Registry)地址,用于存储和管理 Docker 镜像。在 Docker 中,一个注册表(Registry)是存储 Docker 镜像的地方,而 registry-1.docker.io 是 Docker Hub 的注册表地址之一。
  • ‌镜像资源规模‌: 托管超过10万个公开镜像,包含MongoDB、Nginx、Apache、Ubuntu、MySQL等大量官方认证镜像,部分热门镜像的累计下载量已超10亿次。
  • 核心功能‌: 除了公开镜像仓库,还支持私有镜像托管、与GitHub/Bitbucket集成实现自动化构建、Webhook触发自动化测试与通知等开发流程联动能力。

https://registry-1.docker.io 是 Docker 官方镜像仓库的‌入口域名‌,也是你在 daemon.json 中配置镜像加速或查看默认仓库时看到的地址。它本质上是一个指向 Docker Hub 后端服务的统一入口,用于重定向客户端到正确的 API 服务。

https://registry-1.docker.io/v2/ 是该域名下具体的 ‌Docker Registry API v2 接口路径‌。Docker 客户端在拉取镜像时,会先访问这个 /v2/ 路径来获取镜像的元数据(如标签列表、层信息等),再通过 /v2/<镜像名>/manifests/<标签> 等子路径完成实际的镜像下载。这是 Docker 分层镜像协议的标准接口,所有符合 OCI 规范的镜像仓库都必须实现这个 API。

普通用户执行 docker pull nginx 这类命令时,Docker客户端会自动先向 registry-1.docker.io/v2 发起探测请求,验证V2协议可用性,确认正常后才会走V2协议完成后续镜像拉取流程;早年Docker还存在V1版本Registry协议时,客户端会在V2接口访问失败后,自动回退到不带/v2后缀的旧版V1接口完成兼容操作,现在V1协议早已全面停用,日常使用中几乎所有请求都会直接指向带/v2后缀的V2接口。

2. 国内镜像加速源

2024年6月起,国内主流Docker镜像源(如中科大、阿里云、腾讯云、华为云)陆续关闭,原本公开的镜像加速域名均无法访问,导致开发者无法高效拉取镜像。项目构建、测试和部署流程被迫中断,企业需投入额外资源搭建私有镜像仓库或寻找替代方案,显著增加运维成本。

目前国内有很多Docker镜像源都已失效,部分还存在TLS 证书不匹配问题。Docker在握手阶段会验证镜像源证书合法性,如果Docker发现TLS 证书不匹配,就会在日志里抛出 Host doesn't match的警告,导致镜像源无法加速。

这里为你整理Docker配置镜像源直接指定镜像仓库前缀两种方式的完整对比:

对比维度配置全局镜像源(registry-mirrors)直接使用镜像仓库前缀拉取
‌底层核心逻辑‌在Docker守护进程层面设置全局缓存代理,执行不带前缀的镜像拉取命令时,Docker会自动优先向配置的加速站点发起请求,站点作为Docker Hub的反向缓存节点返回预缓存的镜像层,全程对用户无感知。手动指定完整的目标仓库地址,Docker直接和指定的独立镜像仓库建立通信,完全跳过默认仓库和全局镜像源的代理逻辑,直接从目标地址拉取镜像。
‌拉取命令写法‌仅需输入短格式镜像名,例如 docker pull redis,Docker会自动补全为 <镜像源地址>/library/redis,无需手动输入长路径。必须手动补全完整仓库路径,例如 docker pull docker.1ms.run/library/redis,Docker严格按照指定地址发起请求,不会自动补全默认的library命名空间。
‌权限支持‌绝大多数公共镜像源是只读缓存节点,仅支持镜像拉取,不允许执行docker push上传镜像,避免公共资源被滥用污染。提前通过docker login完成目标仓库身份认证后,可完整支持镜像拉取、标记、推送全流程操作,适配私有仓库、自定义镜像仓库的全场景需求。
‌异常容错逻辑‌内置自动故障重试机制,当前镜像源超时、证书校验失败时,会自动切换到下一个配置好的镜像源尝试拉取,容错性更强。没有自动重试切换逻辑,一旦目标仓库出现网络超时、证书不匹配问题,拉取会直接中断报错,不会自动尝试其他备用节点。
‌适用场景‌适合日常开发通用场景,一次配置全局生效,所有不带前缀的镜像拉取都能自动享受加速效果,大幅降低国内访问Docker Hub的网络延迟。适合拉取私有仓库镜像、特定定制镜像的场景,比如企业内部Harbor仓库、第三方专属镜像仓库,必须手动指定完整地址才能精准访问目标资源。

配置全局镜像源、直接指定镜像仓库前缀这两种Docker镜像拉取方式,在默认规则下都会强制执行TLS验证‌,二者的TLS校验逻辑底层是完全一致的,没有本质区别。

Docker作为默认强制HTTPS通信的客户端,无论你使用哪种拉取方式,都会在和镜像仓库建立连接时完成完整的TLS握手流程。

只有当你手动在Docker配置中,把目标仓库地址加入了insecure-registries非安全仓库白名单后,Docker才会跳过该仓库的TLS证书校验,允许直接通过HTTP协议拉取镜像。这个例外规则对两种拉取方式同样生效,不存在某一种方式默认跳过TLS验证的情况。

以下是2026年7月实测可用的国内Docker镜像源汇总表格,按适用场景和特性分类整理:

镜像源名称加速地址核心特性与适用场景
轩辕镜像免费版https://docker.xuanyuan.me无需登录开箱即用,支持全平台(Linux/Windows/macOS),兼容群晖、极空间等主流NAS设备,内置镜像搜索功能,境内合规运营,自动屏蔽违规内容,免费版不稳定,速度一般
轩辕镜像专业版https://xuanyuan.cloud注册后获取专属加速域名,覆盖Docker Hub、GHCR、GCR、K8s官方仓库等全场景,支持多节点故障自动切换,可对接Harbor本地缓存,提供7×24小时技术支持,适配信创国产系统和ARM架构
毫秒镜像https://docker.1ms.run老牌稳定镜像源,实测多地下载速度可达10MB/s以上,无需账号认证,配置简单
DaoCloud镜像https://docker.m.daocloud.io国内最早的Docker镜像服务之一,背靠正规云原生厂商,服务长期稳定,兼容性极强
简行镜像https://docker.jiaxin.site一个稳定可用的国内Docker镜像加速站,免费速度快

上面几个镜像源,经过测试简行镜像速度相对快很多,推荐使用。

由于国内Docker镜像源经常出现失效问题,导致很多镜像不可用,下面是他人长期更新的可用镜像源信息:

1. 最新国内可用的Docker镜像加速器地址收集汇总

2. 国内可用Docker镜像源加速器/DockerHub镜像汇总

3. DockerHub 国内加速镜像列表

3. 配置镜像加速源

  1. 创建或修改/etc/docker/daemon.json配置文件:在终端中执行以下命令,创建或编辑 Docker 的配置文件 daemon.json,请确保文件内容格式是标准的 JSON,否则 Docker 服务可能无法启动。
sudo vi /etc/docker/daemon.json
  1. 写入配置信息:将国内有效的Docker镜像源粘贴到文件中,可以设置多个,Docker会按照顺序进行查找。
{
  "registry-mirrors":[
      "https://docker.jiaxin.site",
      "https://docker.xuanyuan.me",
      "https://docker.1ms.run",
      "https://docker.m.daocloud.io"
    ]
}
  1. 重启 Docker 服务:保存并退出文件后,执行以下命令使配置生效。
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 如果上面的镜像源出现TLS证书认证问题,可以通过一下设置,让Docker在握手阶段不进行TLS证书验证,出于安全性考虑,此方法不建议用于生产环境
{
  "registry-mirrors":[
      "https://docker.jiaxin.site",
      "https://docker.xuanyuan.me",
      "https://docker.1ms.run",
      "https://docker.m.daocloud.io"
    ],
  "insecure-registries": [
      "https://docker.xuanyuan.me",
      "https://docker.1ms.run",
      "https://docker.m.daocloud.io"
    ]
}

然后重复第三步,重启Docker服务即刻生效。我们可以临时通过下面方式拉取镜像:docker pull 镜像源域名/镜像名称

docker pull docker.xuanyuan.me/hello-world

4. 配置Docker代理

如果你的网络环境支持HTTP/Socks5代理(如 Clash、V2Ray 等),直接让Docker通过代理访问Docker Hub,绕过所有镜像源,速度取决于代理质量,此配置方法永久生效。

方法一 systemd方式

技术本质:在进程启动前注入"环境变量"。 通过 Linux 的 init 系统systemd,在Docker守护进程dockerd启动之前,强行向它的进程环境变量中写入HTTP_PROXY等配置。

你创建的文件 /etc/systemd/system/docker.service.d/http-proxy.conf,并不是直接修改 Docker 的程序代码,而是在 systemd 的框架下,生成了一份 “服务覆写文件”。

  • 当 systemd 启动 docker.service 时,它会先读取主服务文件,然后再读取 .conf 覆写文件。
  • 覆写文件中的 Service Environment="HTTP_PROXY=..." 指令,会被 systemd 原封不动地拼接进 dockerd 进程的启动环境变量表中。

生效机理:Go 语言的标准行为。 Docker 守护进程是用 Go 语言编写的。Go 语言的 net/http 标准库有一个内置行为:它会自动检查当前进程的环境变量中是否包含 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY。

因此,当 dockerd 进程启动时,它发现自己内存空间中存有这些变量,于是后续所有由 dockerd 发起的外部 HTTP/HTTPS 请求(如拉取镜像时的 GET /v2/...),都会自动将流量导向这个代理地址。

具体配置步骤如下:

  1. 创建或编辑 Docker 服务配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
  1. 填入代理信息(示例,请替换为你的代理地址)
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
  1. 重载并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

这种配置方式(systemd 覆写文件)是在Docker守护进程(dockerd)的环境变量中设置的。这意味着,只有dockerd进程及其拉取镜像的子进程 会使用这个代理。具体来说,会受影响的操作有:

  • docker pull(拉取镜像)
  • docker run 首次下载镜像时
  • docker build 构建时拉取基础镜像
  • Docker 后台自动检查镜像更新(如果有)

方法二 daemon.json方式

这是 Docker 官方推荐的配置方式。它的优点在于配置集中、更易于管理。具体配置步骤如下:

  • 编辑 Docker 的配置文件 /etc/docker/daemon.json(如果文件不存在,则新建一个)
  • 在文件中添加 proxies 配置项:
{
  "proxies": {
    "http-proxy": "http://你的代理地址:端口",
    "https-proxy": "http://你的代理地址:端口",
    "no-proxy": "localhost,127.0.0.1"
  }
}
  • 保存文件并重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
特别注意:
1 首选方案:使用 daemon.json 文件进行配置。这种方式更规范,且优先级更高。
2 其次方案:如果你习惯 systemd 方式,可以继续使用,它与 daemon.json 效果等价。
3 关键点:https-proxy 的值也应以 http:// 开头
4 优先级:daemon.json 中的配置优先级高于 systemd 的环境变量。如果同时存在,daemon.json 的设置会生效

5. 验证配置是否生效

执行以下命令查看 Docker 系统信息,在输出中查找 Registry Mirrors 字段,确认其地址是否为你配置的阿里云加速源地址。

docker info | grep "Registry Mirrors"
最后更新时间: 2026-07-22 12:04:03
2022-2026 小紫念沁 版权所有