docker registry生产部署必须使用外部存储卷,推荐docker管理卷(如registry-data),因其由docker统一管理路径权限、支持跨节点扩展;绑定挂载仅适用于单机开发验证。

要让 Docker Registry 真正适合生产使用,必须把镜像数据从容器内部移出来,落到外部存储卷上。否则容器一删,所有镜像就没了。
用 Docker 管理卷(推荐)
这是最稳妥、最符合生产规范的方式。Docker 自己管理路径和权限,不依赖宿主机目录结构,也方便后续对接 NFS 或云存储。
- 创建专用卷:
docker volume create registry-data - 启动 Registry 时挂载:
docker run -d \--name registry \-p 5000:5000 \--restart always \-v registry-data:/var/lib/registry \registry:2 - 验证是否生效:进容器执行
ls /var/lib/registry,能看到 _manifests、_layers 等目录,说明数据已写入卷中
用绑定挂载(适合快速验证或开发)
直接映射宿主机一个目录,操作直观,但要注意路径存在性和权限问题。
- 确保宿主机目录可写,比如:
mkdir -p /opt/registry-data && chmod 755 /opt/registry-data - 启动命令中替换挂载参数:
-v /opt/registry-data:/var/lib/registry - 注意:该方式在多节点部署时无法共享数据,仅限单机场景
确认持久化真正起作用
光挂载不等于持久化成功,得验证数据是否脱离容器生命周期。
- 推送一个镜像:
docker push 192.168.1.100:5000/test - 停止并删除容器:
docker rm -f registry - 用同样命令重新启动 Registry 容器
- 再执行
curl http://192.168.1.100:5000/v2/_catalog,仍能看到 test 镜像,说明持久化生效
配合其他生产配置一起用
单独挂载卷只是基础,实际部署中建议同步启用:
- TLS 加密:通过
tls.certificate和tls.key配置证书路径 - 基础认证:用
htpasswd文件限制 push/pull 权限 - 对象存储后端(如 S3):在 config.yml 中改用
s3存储驱动,更适合高可用架构











