官方registry镜像可5分钟启动私有仓库,但生产环境需配置持久化、认证和https:基础启动用docker run -d -p 5000:5000 --name registry registry:2;持久化需挂载-v /data/registry:/var/lib/registry;认证需htpasswd生成账号并设置registry_auth环境变量;https推荐nginx反代+let's encrypt证书。

直接用官方 registry 镜像启动最简私有仓库,5分钟内就能跑起来;但生产环境必须补上持久化、认证和 HTTPS,否则不安全也不可靠。
基础启动:快速验证功能
适合开发测试,命令最短,能立刻推拉镜像:
- 执行:
docker run -d -p 5000:5000 --restart=always --name registry registry:2 - 本地测试推送:
docker tag hello-world localhost:5000/hello:v1 && docker push localhost:5000/hello:v1 - 注意:此时所有操作明文传输,任意机器都能推拉镜像,不可用于内网以外环境
数据持久化:避免容器重启丢镜像
默认镜像存容器内部,一删容器就全没。必须挂载宿主机目录:
- 先创建目录:
mkdir -p /data/registry - 启动时加挂载:
-v /data/registry:/var/lib/registry - 后续升级或重建容器,只要挂载路径不变,原有镜像自动保留
添加用户认证:防止未授权写入
没有登录机制的仓库等于敞开大门。用 htpasswd 生成账号文件:
- 生成密码文件:
mkdir -p /auth && docker run --rm --entrypoint htpasswd httpd:2 -Bbn admin mypass > /auth/htpasswd - 启动带认证的 Registry:
docker run -d -p 5000:5000 -v /auth:/auth -v /data/registry:/var/lib/registry --name registry -e REGISTRY_AUTH=htpasswd -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH="/auth/htpasswd" registry:2 - 客户端需先登录:
docker login localhost:5000 -u admin -p mypass
启用 HTTPS(生产必需)
Docker 默认拒绝向 HTTP 仓库推送镜像(除非改 daemon.json)。推荐用 Nginx 反代 + 免费证书:
- 申请域名并配置 DNS,用 Certbot 获取证书,存到
/etc/nginx/certs/ - Nginx 配置反向代理到
http://localhost:5000,开启 SSL,并透传X-Real-IP等头 - 客户端用
https://your-registry.example.com推拉,无需额外配置 - 若暂无域名,可用自签名证书 + 客户端信任(仅限内网临时使用)











