Docker 注册表登录失败并显示“证书由未知机构签名”
题
我正在 ubuntu 上运行一个私有 docker 注册表,使用 S3 进行存储。我在通过 SSL 获取 docker 登录/推/拉命令时遇到问题。我在 Gunicorn 前面使用 Nginx 来运行注册表。它通过 HTTP 运行没有任何问题,但在将产品系统切换到 HTTPS 后,它会从客户端 docker 登录抛出以下错误。
Invalid Registry endpoint: x509: certificate signed by unknown authority
我从 Commodo 购买了相当便宜的 PositiveSSL 证书来用于此目的。我已确保根 CA 和中间 CA 安装在运行注册表的 Ubuntu 系统上。以下是我的服务器的 nginx 配置
# Default nginx site to run the docker registry upstream docker-registry { server localhost:5000; } server { listen 443; server_name docker.ommited.net; ssl on; ssl_certificate /etc/ssl/docker-registry.crt; ssl_certificate_key /etc/ssl/docker-registry.key; proxy_set_header Host $http_host; # required for docker client's sake proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads location / { proxy_pass http://localhost:5000/; } }
我试图弄清楚如何让 docker 正确识别证书,或忽略证书警告。我正在运行 docker-registry 版本 v0.7.3,我使用的特定客户端是 Docker 版本 1.1.2,内部版本 d84a070。顺便说一句,当在浏览器中访问注册表时,可以正确识别证书。任何帮助我指明正确方向的帮助将不胜感激!
解决方案
对于像Comodo或Startsl这样的廉价/较小的已知证书,您需要将整个证书链添加到使用nginx的证书文件中。许多操作系统不相信中间CA,只是根CA,因此您需要填写主机证书与OS信任的根CA之间的丢失步骤。
在您收到证书的电子邮件中,您还应该查找到中间CA和根CA的链接。打开docker-registry.crt
文件,滚动到底部,并附加中间CA,最后,对Positivessl链的根CA证书。一旦完成了,重新启动nginx。你现在应该好好去。
其他提示
对于Rhel主机,您可以将CA Cert添加到客户端主机上的PKI CA列表:
cp docker-registry.crt /etc/pki/ca-trust/source/anchors/docker-registry.crt
update-ca-trust
systemctl restart docker
.
如果您使用的是 Mac,只需将注册表添加到 insecure-registries
设置在 ~/.docker/daemon.json
:
{
"debug" : true,
"experimental" : true,
"registry-mirrors" : [],
"insecure-registries" : ["registry.your.domain.de"]
}
如果您在某个地方犯了错误(我忘记了 JSON 中的逗号),之后启动 docker 守护进程可能会出现一些问题。即任何抛出一个 Error response from daemon: Bad response from Docker engine
. 。几次重新启动和重置后就自行解决了。
如果您使用 LetsEncrypt 和 nginx,只需更改 ssl_certificate
钥匙来自 cert.pem
到 fullchain.pem
.