代理后面的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 

我知道,我们的公司将https请求replaceSSL证书。

我试图相信我们公司的CA证书:

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

 /etc/pki/tls/cert.pem 

但它仍然没有工作。

有任何想法吗?

要将docker配置为使用代理系统,首先需要将HTTPS_PROXY / HTTP_PROXY环境变量添加到docker sysconfig文件中。 但是,根据您使用init.d或服务工具,您需要添加“导出”语句。 作为解决方法,您可以简单地在Docker的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>" 

为了让docker使用ssl拦截代理,必须将代理根证书添加到系统信任存储中。

对于CentOS,将文件复制到/ etc / pki / ca-trust / source / anchors /并更新ca信任存储。 之后重新启动Docker服务。 如果您的代理使用NTLM身份验证 – 有必要使用中间代理,如cntlm。 这篇博文详细解释了它

根据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

找到您的系统上存在的一个,并附上您的证书。

(当你升级包含该文件的包时,准备好再次执行该操作…)

我希望有一个更好的方法,但这是迄今为止我发现的唯一一个:-)

@ 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守护进程是必要的!