自建 Docker-代理镜像仓库(私有镜像托管)
这篇笔记聚焦 Docker 私有镜像仓库的 hosted/private 托管模式,说明它不是自动代理上游的缓存,而是需要用户或 CI/CD 主动把镜像搬运进去后才能供其他机器拉取。文章用 nginx:latest 迁移到 hub.jacin.me/library/nginx:latest 为例,给出 pull、tag、push 三步流程:先从 Docker Hub 拉取镜像,再改成本地私有仓库命名空间,最后推送到自建仓库。推送时出现 only the available single-platform image was pushed 的提示,是因为官方 nginx:latest 属于多架构镜像,但普通 docker pull 通常只下载当前机器 CPU 架构对应的版本,push 时私有仓库也只能保存本地已有的平台内容。对服务器、开发机和生产环境都统一使用 amd64 等同构场景来说,这通常不影响运行;但如果 amd64 VPS 推送后的镜像被 arm64 的 Mac M1/M2 或树莓派拉取,就可能遇到架构不匹配、exec format error 或找不到匹配架构的问题。文末通过表格区分代理模式和私有仓库模式:前者偏向 Docker Hub 等上游的加速与只读缓存,后者用于存储和分发自己构建的业务镜像,并且必须依赖 push 写入内容。它适合正在搭建内网镜像分发、理解多架构镜像行为,或在代理缓存与私有托管之间做选型的运维和后端开发者阅读。

