我正在使用S3进行存储,在ubuntu上运行私有docker注册表。我遇到问题,让docker login / push / pull命令通过SSL工作。我在Gunicorn面前使用Nginx来运行注册表。它在HTTP上没有任何问题,但在为prod系统切换到HTTPS后,它会从客户端docker登录中抛出以下错误。
Invalid Registry endpoint: x509: certificate signed by unknown authority
我从Commodo购买了一个相当便宜的PositiveSSL证书,用于此目的。我确保在运行注册表的Ubuntu系统上安装了根CA和中间CA.以下是我的服务器的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。另外,在浏览器中访问注册表时,可以正确识别证书。任何帮助我指向正确方向的人都将不胜感激!
答案 0 :(得分:15)
对于COMODO或StartSSL等廉价/鲜为人知的证书,您需要将整个证书链添加到与nginx一起使用的证书文件中。许多操作系统不信任中间CA,只信任根CA,因此您需要填写主机证书和操作系统信任的根CA之间的缺失步骤。
在收到证书的电子邮件中,您还应找到中间CA和根CA的链接。打开docker-registry.crt
文件,滚动到底部,然后附加中间CA,最后附加PositiveSSL链的根CA证书。完成后,重新启动nginx。你现在应该好好去。
答案 1 :(得分:3)
对于RHEL主机,您可以将CA证书添加到客户端主机上的PKI CA列表中:
cp docker-registry.crt /etc/pki/ca-trust/source/anchors/docker-registry.crt
update-ca-trust
systemctl restart docker
答案 2 :(得分:1)
如果您使用的是Mac,只需将注册表添加到insecure-registries
中的~/.docker/daemon.json
设置:
{
"debug" : true,
"experimental" : true,
"registry-mirrors" : [],
"insecure-registries" : ["registry.your.domain.de"]
}
如果你在某个地方犯了一个错误(我在JSON中忘记了一个逗号),可能会出现启动docker守护进程后的一些问题。即任何docker命令抛出Error response from daemon: Bad response from Docker engine
。稍后重启并重置以解决问题。
答案 3 :(得分:0)
如果您使用letsencrypt和nginx,只需将ssl_certificate
密钥从cert.pem
更改为fullchain.pem
。