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

使用自签名证书的Docker Registry镜像推送失败求助

解决自签名证书Docker Registry镜像推送问题

问题根源

  • 端口不匹配:树莓派上的Registry容器绑定了443端口,但你推送时使用了未对外开放的5000端口,导致连接被拒绝。
  • 证书域名不符:当前Registry加载的证书并非你生成的含rpi域名的证书,大概率是旧容器残留配置或证书挂载异常导致。

修复步骤

1. 清理旧Registry容器

先移除可能残留的旧容器,避免配置干扰:

docker stop registry
docker rm registry

2. 重新生成/验证证书

在树莓派上检查现有证书的域名信息,确认包含rpi:

openssl x509 -in certs/domain.crt -text -noout | grep -A 1 "Subject Alternative Name"

若输出未显示DNS:rpi,则重新生成证书(强制指定Common Name为rpi):

rm -rf certs
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -addext "subjectAltName = DNS:rpi" -x509 -days 365 -out certs/domain.crt -subj "/CN=rpi"

3. 重新启动Registry容器

确保证书挂载路径正确,绑定443端口:

docker run -d --restart=always --name registry \
  -v $HOME/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -p 443:443 registry

4. 修正Linux PC的证书存放路径

之前错误将证书放到了rpi:5000目录下,需调整为对应443端口的路径:

# 删除错误路径
sudo rm -rf /etc/docker/certs.d/rpi:5000
# 创建正确路径并拷贝证书
sudo mkdir -p /etc/docker/certs.d/rpi:443/
scp pi@rpi:certs/domain.crt ca.crt
sudo mv ca.crt /etc/docker/certs.d/rpi:443/
# 重启Docker使配置生效
sudo systemctl restart docker

5. 测试镜像推送

给本地镜像打对应标签后推送:

# 为本地镜像打标签(假设本地镜像名为test-image:latest)
docker tag test-image:latest rpi:443/test-image:latest
# 执行推送
docker push rpi:443/test-image:latest

验证推送结果

在树莓派上执行以下命令,确认镜像已上传:

curl -k https://rpi:443/v2/_catalog

内容的提问来源于stack exchange,提问作者nagy.zsolt.hun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:50:27