首页/云/Docker 容器速查/用 registry:2 搭建私有镜像仓库
镜像与构建107 条

用 registry:2 搭建私有镜像仓库

用官方 registry 镜像在服务器上运行轻量私有仓库:打标签、推送、验证目录接口,适合内网镜像分发与缓存。

Docker 容器速查云更新于 2026-10-13

私有镜像仓库是什么

官方 registry 镜像是 Docker 发布的最小化仓库实现(对应开源项目 distribution),只提供 push/pull 与目录查询等基础能力。把它跑在内网,可以做到镜像不出内网、拉取更快、发布可追溯。它默认不带认证与加密,属于可用的内网基础设施,而不是开箱即用的生产级产品;要对外提供就需要自己做反向代理、TLS 与鉴权。

基本信息

启动方式docker run -d -p 5000:5000 -v 卷名:/var/lib/registry registry:2
默认服务端口容器内 5000/tcp
数据目录容器内 /var/lib/registry
健康检查接口GET http://主机:5000/v2/ (返回 200 表示就绪)
目录接口GET /v2/_catalog、GET /v2/<名称>/tags/list
适用平台任何支持 Docker 的 Linux 主机(Windows 容器场景另配)

典型使用场景

  • 内网自建仓库承载业务镜像,交付环节不再依赖公网拉取
  • 给受限网络环境做镜像中转:外网机器 pull 后 save,内网 load 再 push
  • 给团队提供统一的镜像命名空间与标签规范
  • 做 Docker Hub 的本地缓存,减少重复外网拉取
  • 在实验室快速验证镜像构建产物是否可被 K8s 拉取

启动与推送示例

启动与推送示例
# 启动仓库并把数据挂到具名卷,容器重建不丢镜像
docker run -d -p 5000:5000 --name registry \
  -v registry-data:/var/lib/registry registry:2

# 打标签时仓库地址必须写进镜像名,否则推送会指向 Docker Hub
docker tag app/web:1.0 10.0.0.10:5000/app/web:1.0
docker push 10.0.0.10:5000/app/web:1.0

# 验证仓库已接收镜像
curl -s http://10.0.0.10:5000/v2/_catalog

接口与返回怎么读

请求正常返回异常与含义
GET /v2/200 空 JSON401 说明启用了鉴权;404 路径被反代改坏
GET /v2/_catalog{"repositories":[...]}列表为空说明还没有 push 成功
GET /v2/名称/tags/list{"tags":[...]}404 表示该镜像名从未推入
docker push逐层上传并输出 digestdenied 多为鉴权或命名空间权限问题
docker pull按层下载no such host 说明仓库地址写错
存储规划:数据默认写在容器内 /var/lib/registry,容器一删镜像全没,务必挂卷;仓库要跨主机访问,建议用反向代理加 TLS 证书,而不是长期依赖 insecure-registries。
registry:2 默认不允许删除已有镜像 tag,需要显式打开删除能力并在删除后执行垃圾回收,否则磁盘只涨不降。

易错点

  • 官方 registry 默认无认证无加密,直接暴露公网等于公开镜像库,公网入口必须套反代加鉴权与 TLS
  • 从其他主机以明文 HTTP 访问时,客户端需在 daemon.json 的 insecure-registries 中登记该地址,否则报证书或握手错误
  • 不挂持久化卷就跑,容器重建后镜像引用全部丢失,下游节点随即拉取失败
  • 镜像名里不带仓库地址(如仍是 app/web:1.0)会默认推往 Docker Hub,可能直接把内部镜像推到公网

数据来源与参考

  • Docker 官方文档:registry 镜像与 Distribution 项目(docs.docker.com/registry)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌