You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新Docker私有仓库自签名SSL/TLS证书且保留现有镜像

无中断更新Docker私有仓库SSL/TLS证书(保留现有镜像)

关键问题排查

你之前重新部署容器丢失镜像,是因为启动命令没有挂载镜像存储目录(容器默认路径为/var/lib/registry),导致容器内的镜像数据随容器销毁而丢失;直接复制证书后重启失败,大概率是证书文件权限不符合要求(容器以registry用户运行,UID为10000,私钥必须设为600权限)。

正确更新步骤

情况1:已通过本地卷挂载/certs目录

如果你的仓库容器启动时已用-v参数将本地./certs挂载到容器内/certs(如你提供的启动命令),直接替换本地./certs下的新证书文件(certificate.crt和private.key),然后重启容器即可:

# 替换本地证书后重启容器,过程几乎无中断
docker restart registry

情况2:未挂载/certs目录到本地

若之前未挂载/certs卷,需先复制新证书到容器内并修正权限:

  1. 复制新证书到容器的/certs目录:
# 替换<registry_container_id>为你的容器ID或名称
docker cp ./new_certs/certificate.crt <registry_container_id>:/certs/
docker cp ./new_certs/private.key <registry_container_id>:/certs/
  1. 修正证书文件权限,确保容器内registry用户可读取:
docker exec <registry_container_id> chown 10000:10000 /certs/certificate.crt /certs/private.key
docker exec <registry_container_id> chmod 600 /certs/private.key  # 私钥必须设为600权限
  1. 重启容器:
docker restart <registry_container_id>

后续预防措施

为避免后续重新部署丢失镜像,启动容器时必须挂载镜像存储卷,修改你的启动命令添加以下参数:

-v `pwd`/registry-data:/var/lib/registry \  # 挂载本地目录保存镜像数据

完整启动命令示例:

docker run -d \                                                                                                         
--restart=always \
--name registry \
-v `pwd`/auth:/auth \
-v `pwd`/certs:/certs \
-v `pwd`/registry-data:/var/lib/registry \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/certificate.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/private.key \
-p 443:443 registry:2

内容的提问来源于stack exchange,提问作者Niamatullah Bakhshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:57:18