Docker镜像拉取缓存需通过配置registry mirrors或部署代理缓存服务实现,本地Docker自身不缓存远程镜像层;常用方式为配置国内镜像加速器,企业级场景可自建Harbor代理缓存,还可选用Nginx+Registry组合方案。

Docker 镜像拉取缓存不是靠“开启某个开关”实现的,而是通过配置镜像源代理(registry mirrors)或部署代理缓存服务,让 Docker 客户端把请求发给一个能自动缓存远程镜像的中间服务。本地 Docker 本身不主动缓存远端镜像层,但可通过以下两类方式实质性实现“拉取缓存”效果。
一、用国内镜像加速器做轻量级缓存
这是最常用、最简单的方式。你配置的镜像源(如 DaoCloud、阿里云等)本身是远程 registry 的缓存节点,它们会: - 首次拉取时从 docker.io/gcr.io 等源站下载并存储 - 后续相同镜像请求直接返回本地已缓存的数据 - 自动更新过期内容(按 TTL 或 manifest 变更触发)操作步骤:
- 编辑 /etc/docker/daemon.json(Linux)或通过 Docker Desktop → Settings → Docker Engine(Windows/macOS)
- 在 JSON 中添加或合并 "registry-mirrors" 字段,例如:
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com" ] } - 保存后重启 Docker:
sudo systemctl restart docker或点击 Apply & Restart
验证是否生效:
docker info | grep -A 1 "Registry Mirrors"
看到你填的地址即表示配置成功。之后 docker pull nginx 实际走的是镜像源的缓存服务,第二次拉同一镜像会明显更快。
二、自建 Harbor 代理缓存(适合企业/高频多仓库场景)
当需要缓存 gcr.io、quay.io、ghcr.io 等非 Docker Hub 的镜像时,普通镜像加速器通常不支持。此时应部署 Harbor 并启用 Proxy Cache 功能。关键配置项(在 harbor.yml 中):
- 开启 proxy 模块
- 添加
cached_registries列表,例如:proxy: cached_registries: - name: gcr-io endpoint: https://gcr.io verify_remote_cert: true - 运行
./install.sh --with-proxy-cache完成安装
客户端侧只需把 Harbor 地址设为 registry mirror:
{ "registry-mirrors": ["https://harbor.your-company.com"] }这样,docker pull gcr.io/google-containers/pause:3.9 实际请求会被 Harbor 截获 → 检查本地是否有该镜像层 → 有则直返,无则去 gcr.io 拉取并存入本地存储。
三、注意事项与常见误区
- Docker 守护进程自身**不缓存镜像层到本地磁盘供下次 pull 复用**(它只缓存构建时的 layer,不缓存 pull 来的 layer)。所谓“本地缓存”是指你机器上已有的镜像,`docker pull` 命令发现镜像已存在就跳过,但这不属于“拉取缓存机制”,只是命令逻辑。 - `insecure-registries` 和 `auths` 是用于私有仓库认证,和缓存无关,别混淆。 - 多个镜像源地址写在 `registry-mirrors` 数组里,Docker 会按顺序尝试,**不是同时并发请求**;建议选 1–2 个稳定源即可,太多反而增加失败概率。 - Harbor 代理缓存需确保其后端存储(如本地磁盘或 S3)空间充足,否则缓存写满会导致拉取失败。四、进阶:Nginx + Registry 组合缓存(极简自建)
如果不想上 Harbor,可用开源 registry 搭配 Nginx 反向代理实现基础缓存: - 启动一个带 proxy_cache 的 registry 实例(启用 `proxy` 模式) - Nginx 配置 `proxy_cache_path` 和 `proxy_cache_valid` - 把 registry 地址加入 `registry-mirrors`这种方式对运维要求较高,适合有定制化需求的团队,一般推荐优先用 Harbor 或成熟镜像源。
不复杂但容易忽略


















