私有 docker 仓库应分步搭建:先用 docker run -d --name registry -p 5000:5000 registry:2 启动基础服务;再挂载 /data/registry 实现持久化;接着通过 htpasswd 配置 basic auth 认证;最后配置 tls 证书启用 https,生产环境必须完成全部四步。

直接用官方 registry 镜像启动最简服务,再逐步补上持久化、认证和 HTTPS,就能搭出可用的私有仓库。关键不是一步到位,而是按需叠加——开发环境可先跳过认证和加密,生产环境必须加上。
基础运行:一条命令跑起来
在已装 Docker 的服务器上执行:
docker run -d --name registry -p 5000:5000 --restart=always registry:2- 此时仓库监听
http://localhost:5000,仅限本机或内网访问 - 默认数据存在容器里,重启或删容器就会丢镜像,生产环境务必挂载卷
数据持久化:避免镜像丢失
把镜像文件存到宿主机目录,确保容器重建后数据不丢:
- 创建本地目录:
mkdir -p /data/registry - 启动时挂载:
-v /data/registry:/var/lib/registry - 完整命令示例:
docker run -d --name registry -p 5000:5000 -v /data/registry:/var/lib/registry --restart=always registry:2
添加基础认证:防止未授权推送
用 HTTP Basic Auth 控制写入权限,读取通常也受限(除非显式放开):
- 生成密码文件:
mkdir auth && docker run --rm --entrypoint htpasswd httpd:2 -Bbn username password > auth/htpasswd - 启动带认证的 registry:
docker run -d --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -v $(pwd)/auth:/auth -e REGISTRY_AUTH=htpasswd -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd --restart=always registry:2 - 客户端需先执行:
docker login localhost:5000,再 push/pull
启用 HTTPS:生产环境强制要求
Docker 默认拒绝向 HTTP 仓库 push 镜像(除非配置 --insecure-registry),所以正式部署必须配 TLS:
- 生成自签名证书(测试用):
mkdir certs && openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt -subj "/CN=localhost" - 启动时挂载证书并指定路径:
-v $(pwd)/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key - 客户端需将
domain.crt加入系统信任库,或临时配置--insecure-registry(仅限测试)
不复杂但容易忽略











