【问题标题】:Docker behind proxy that changes ssl certificate更改 ssl 证书的代理背后的 Docker
【发布时间】:2013-12-14 13:30:37
【问题描述】:

我正在尝试运行以下 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 请求即时替换 SSL 证书。

我尝试通过将我们公司的 CA 证书放入以下内容来信任它:

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

/etc/pki/tls/cert.pem

但是还是不行。

有什么想法吗?

【问题讨论】:

    标签: linux ssl rhel docker


    【解决方案1】:

    @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 daemon 是必须的!

    【讨论】:

      【解决方案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

      找到您系统上存在的那个,并将您的证书附加到它。

      (当您升级包含该文件的软件包时,请准备好再次执行此操作...)

      我希望有更好的方法,但这是我目前发现的唯一一个:-)

      【讨论】:

      • 我将证书放在第一个文件中,现在我摆脱了这个错误,但我得到了一个新的。
      • 我还必须通过 sudo service docker restart 重新启动 Docker 守护进程。谢谢!
      【解决方案3】:

      要将 docker 配置为使用代理系统,您首先需要将 HTTPS_PROXY / HTTP_PROXY 环境变量添加到 docker sysconfig 文件中。但是,根据您使用的是 init.d 还是服务工具,您需要添加“export”语句。作为一种解决方法,您可以简单地在 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 这样的中间代理。 This blog post explains it in detail

      【讨论】:

        猜你喜欢
        • 2015-02-16
        • 2011-08-16
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 2014-11-06
        • 2020-08-04
        • 1970-01-01
        • 2014-12-20
        相关资源
        最近更新 更多