Docker за прокси, который меняет сертификат ssl

Я пытаюсь запустить следующую команду docker:

docker run -i -t ubuntu /bin/bash

Но я получаю ошибку:

Unable to find image 'ubuntu' (tag: latest) locally

Pulling repository ubuntu
2013/11/28 14:00:24 Get https://index.docker.io/v1/images/ubuntu/ancestry: x509: certificate signed by unknown authority

Я знаю, что наша компания заменяет сертификат SSL на лету для запросов https.

Я попытался доверять нашему сертификату CA нашей компании, поставив его в:

 /etc/pki/tls/certs/ca-bundle.crt

и

/etc/pki/tls/cert.pem

Но он все еще не работает.

Любые идеи?

Ответы

Ответ 1

Чтобы настроить docker для работы с прокси-системой, вам сначала нужно добавить переменную среды HTTPS_PROXY/HTTP_PROXY в файл sysconfig докера. Однако в зависимости от того, используете ли вы init.d или инструмент services, вам нужно добавить инструкцию "export". В качестве обходного пути вы можете просто добавить оба варианта в файл sysconfig докера:

/etc/sysconfig/docker

HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"

Чтобы заставить докер работать с прокси-серверами ssl, вы должны добавить сертификат прокси-сервера в хранилище системного доверия.

Для CentOS скопируйте файл в/etc/pki/ca-trust/source/anchors/и обновите хранилище доверия ca. После этого перезапустите службу докеров. Если ваш прокси использует аутентификацию NTLM - необходимо использовать промежуточные прокси, такие как cntlm. Это сообщение в блоге подробно объясняет это

Ответ 2

Согласно http://golang.org/src/pkg/crypto/x509/root_unix.go, вы должны добавить свой сертификат к одному из следующих:

  • /etc/ssl/certs/ca-certificates.crt
  • /etc/pki/tls/certs/ca-bundle.crt
  • /etc/ssl/ca-bundle.pem
  • /etc/ssl/cert.pem
  • /usr/local/share/certs/ca-root-nss.crt

Найдите ту, которая существует в вашей системе, и добавьте к ней свой сертификат.

(И будьте готовы сделать это снова, когда вы обновите пакет, содержащий этот файл...)

Я надеюсь, что есть лучший метод, но это единственный, который я нашел до сих пор: -)

Ответ 3

@jpetazzo отвечает в целом правильно, однако есть более удобный способ сделать то же самое (без ручного редактирования файла ca-bundle):

  • на CentOS:

    sudo cp yourcert.crt /etc/pki/ca-trust/source/anchors/
    sudo update-ca-trust extract
    sudo service docker restart
    
  • на Debian:

    sudo cp yourcert.crt /usr/local/share/ca-certificates/
    sudo update-ca-certificates
    sudo service docker restart
    

Обратите внимание, что необходимо перезапустить демон docker!