Docker私有Registry搭建需三步:启动容器(docker run -d -p 5000:5000 --name registry registry:2)、挂载宿主机目录实现持久化(-v /data/registry:/var/lib/registry)、生产环境必须配置HTTPS与htpasswd认证。

用 Docker 官方 registry:2 镜像就能快速搭起私有 Registry 服务,核心是“启动容器 + 持久化存储 + 安全加固”三步。开发测试可跳过 HTTPS 和认证,但生产环境必须加上。
基础部署:一条命令跑起来
最简方式(仅限内网测试):
docker run -d -p 5000:5000 --restart=always --name registry registry:2
这条命令会启动一个监听 5000 端口的 Registry 容器,但注意:
• 镜像默认存在容器内部,重启或删除容器后数据就丢了
• 所有客户端无需密码即可 push/pull,不安全
• 使用 HTTP 协议,Docker 客户端需额外配置才能信任
验证是否成功:访问 http://:5000/v2/_catalog,返回 {"repositories":[]} 表示服务已就绪。
持久化存储:避免镜像丢失
必须将镜像数据挂载到宿主机目录,推荐操作:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 创建本地目录:
mkdir -p /data/registry - 启动时挂载:
-v /data/registry:/var/lib/registry - 确保目录权限正确:
chown -R 1000:1000 /data/registry(Registry 容器以 UID 1000 运行)
这样即使容器重建,所有已推送的镜像仍保留在 /data/registry 中。
HTTPS 与认证:生产环境必备
没有 HTTPS,Docker 客户端拒绝推送;没有认证,任何人都能上传任意镜像。
启用 HTTPS(以自签名证书为例):
- 生成证书:
openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days 365 -keyout domain.key -out 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 - 改用 443 或其他端口映射(如
-p 443:443),并设REGISTRY_HTTP_ADDR=0.0.0.0:443
添加基础认证:
- 生成用户密码文件:
htpasswd -Bbn admin password123 > auth/htpasswd - 挂载认证文件:
-v $(pwd)/auth:/auth - 设置环境变量:
-e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"
客户端使用注意事项
推送前需先打标签:docker tag nginx:latest your-registry-ip:5000/my-nginx
推送命令:docker push your-registry-ip:5000/my-nginx
拉取命令:docker pull your-registry-ip:5000/my-nginx
若用 HTTPS + 自签名证书,客户端需将证书添加到系统信任库,或在 Docker daemon.json 中配置 insecure-registries(仅限测试环境)。

















