我正在 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
.

https://www.happhyassassin.net/2014/09/06/adding-your-freeipa-servers-ca-certificate-to-the-system -wide-trust-store-on-fedora-and-rhel /

如果您使用的是 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.pemfullchain.pem.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top