Ошибка входа в систему Docker с "Сертификатом, подписанным неизвестным органом"

Я использую приватный реестр docker на ubuntu, используя S3 для хранения. У меня возникли проблемы с подключением команд регистрации /push/pull докеров для работы через SSL. Я использую Nginx перед Gunicorn для запуска реестра. Он работает без каких-либо проблем по протоколу HTTP, но после перехода на HTTPS для системы prod он выдает следующую ошибку из входа в docker клиента.   

Invalid Registry endpoint:  x509: certificate signed by unknown authority 

Я купил довольно дешевый сертификат PositiveSSL от Commodo, чтобы использовать для этого. Я обеспечил, чтобы корневой ЦС и промежуточный ЦС были установлены в системе 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 sake
      proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

      client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads


      location / {
        proxy_pass http://localhost:5000/;
      }
    }

Я пытаюсь выяснить, как заставить докер правильно распознать сертификат или игнорировать предупреждение о сертификате. Я запускаю версию docker-registry v0.7.3, конкретным клиентом, который я использую, является версия Docker 1.1.2, build d84a070. на боковой ноте, при посещении реестра в браузере сертификат надлежащим образом распознается. любая помощь, указывающая на меня в правильном направлении, будет очень признательна!

Ответы

Ответ 1

Для дешевых/менее известных сертификатов, таких как COMODO или StartSSL, вам необходимо добавить целую цепочку сертификатов в файл сертификата, который вы используете с nginx. Многие операционные системы не доверяют промежуточным ЦС, а именно корневому ЦС, поэтому вам нужно заполнить недостающие шаги между сертификатом для вашего хоста и корневым ЦС, которому доверяет ОС.

В электронном письме, с которым вы получили сертификат, вы также должны найти ссылки на промежуточные центры сертификации и корневой центр сертификации. Откройте файл docker-registry.crt, прокрутите страницу вниз и добавьте промежуточные ЦС и, наконец, корневой сертификат ЦС для цепочки PositiveSSL. После того, как вы это сделали, перезапустите nginx. Теперь вам должно быть хорошо.

Ответ 3

Если вы работаете на 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 об Error response from daemon: Bad response from Docker engine. Несколько перезагружается и сбрасывается позже, что решает сам.

Ответ 4

Если вы используете letsencrypt и Nginx, просто изменить ssl_certificate ключ от cert.pem к fullchain.pem.