Докер за прокси, который меняет 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.
Я пытался доверять сертификату нашей компании, вставив его в:
/etc/pki/tls/certs/ca-bundle.crt
а также
/etc/pki/tls/cert.pem
Но это все еще не работает.
Есть идеи?
3 ответа
Чтобы настроить docker для работы с прокси-системой, сначала необходимо добавить переменную среды HTTPS_PROXY / HTTP_PROXY в файл sysconfig docker. Однако, в зависимости от того, используете ли вы init.d или сервисный инструмент, вам нужно добавить оператор "export". В качестве обходного пути вы можете просто добавить оба варианта в файл sysconfig docker:
/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 ca. Перезапустите сервис докера позже. Если ваш прокси использует аутентификацию NTLM - необходимо использовать промежуточные прокси, такие как cntlm. Этот пост в блоге объясняет это подробно
Ответ @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 необходим!
Согласно 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
Найдите тот, который существует в вашей системе, и добавьте к нему свой сертификат.
(И будьте готовы сделать это снова при обновлении пакета, содержащего этот файл...)
Я надеюсь, что есть лучший метод, но это единственный, который я нашел до сих пор:-)