【问题标题】:Setup docker toolbox behind proxy on Windows在 Windows 上的代理后面设置 docker 工具箱
【发布时间】:2018-10-29 03:24:59
【问题描述】:

根据我的公司政策,我们使用的是 Windows 7,在机器上具有特权访问(管理员权限的子集)。

我已经安装了 docker 工具箱,但是当需要从 Artifactory 公司的 Docker 中心提取图像时,由于 HTTPS 和代理,我遇到了问题。

【问题讨论】:

    标签: docker docker-machine docker-toolbox


    【解决方案1】:

    我终于弄清楚了如何在 Windows 7 上使用 HTTPS 证书在企业代理后面正确设置 docker 工具箱。

    以下是步骤

    1. 安装 Docker 工具箱
    2. 安装完成后前往C:/Users/<user>/.docker/machine/machines/default打开config.json。如果您没有该文件夹,请从您的桌面打开“Docker Quickstart Terminal”,为自己创建一个虚拟盒子 docker-machine。
    3. 下添加以下行
    {
        "HostOptions": {
            ...
            "EngineOptions": {
                ...
                "Env": [
                    "HTTP_PROXY=http://<username>:<pwd>@<host>:<port>",
                    "HTTPS_PROXY=http://<username>:<pwd>@<host>:<port>",
                    "NO_PROXY=<docker-machine ip>"
                ],
            }
        }
     }
    

    请注意HTTPS_PROXY中的http。

    1. 完成上述步骤后,需要安装公司证书

    2. 获取企业根证书集,应将其安装在企业配置的浏览器中。在 Chrome 中,您可以转到设置,单击显示高级设置,然后向下滚动到 HTTPS/SSL,您可以在其中选择管理证书。我的组织已将它们放入受信任的根认证机构,并以组织的名字命名。每次导出一个(我有两个),确保选择 DER 格式。

    3. 将它们保存到已知位置后,您需要将它们转换为 PEM 格式。我发现最简单的方法是在 Docker 快速启动终端中运行 openssl.exe[1] 命令。

    openssl x509 -inform der -in certificate.cer -out certificate.pem

    1. 获得 .pem 文件后,您需要将它们复制到 Docker 机器可以访问的位置。我在c:\Users\my.username\certs 中创建了一个目录并将它们复制到那里。

    2. 此步骤可能不是绝对必要的,但这是我所做的,并且有效。您需要将这些证书复制到您的 boot2docker 分区中,该分区是持久的。我正在连接到我的默认计算机,这是您在第 5 步中需要执行的操作。

    MINGW64:$docker-machine ssh default

    docker@default:~$sudo -s

    root@default:/home/docker# mkdir /var/lib/boot2docker/certs

    root@default:/home/docker# cp /c/Users/my.username/certs/*.pem /var/lib/boot2docker/certs/

    现在是时候编写一个bootlocal.sh 脚本了,它会在每次系统启动时将证书复制到正确的位置。[2]如果您还没有,请按照第 4 步打开与机器的 SSH 连接。

    touch /var/lib/boot2docker/bootlocal.sh &amp;&amp; chmod +x /var/lib/boot2docker/bootlocal.sh

    vi /var/lib/boot2docker/bootlocal.sh

    插入以下内容并保存文件:

    #!/bin/sh
    
    mkdir -p /etc/docker/certs.d && cp certs/certificate.pem /etc/docker/certs.d
    

    使用机器内的reboot 命令或使用 Docker 终端的 docker-machine 命令重新启动机器:

    docker-machine restart default

    现在您应该可以运行“hello-world”等。我希望这有帮助。

    参考:Docker on Windows (Boot2Docker) - certificate signed by unknown authority error

    【讨论】:

    • 我想我也有同样的问题。我被困在第 2 步。什么是 Docker 快速启动终端以及如何启动它?
    • @Bobby 是 CMD 外壳,当您安装 Docker for windows 时,Windows 上会附带 Docker。
    • 我有 Docker Desktop,但没有看到单独的终端应用程序。我假设您指的是 Anaconda Prompt 之类的东西,它是 Anaconda 附带的终端?
    【解决方案2】:

    我最近遇到了同样的问题,并且能够通过以下步骤解决问题。正如官方 docker 文档中所建议的那样

    1. 首先,如果已经创建了默认的 docker-machine,则停止并删除它

          docker-machine stop default
          docker-machine rm default
      

      其中 'default' 是 docker-machine 的默认名称。

      1. 删除后使用代理设置创建 docker-machine:

        docker-machine create -d virtualbox --engine-env HTTP_PROXY=http://example.com:8080 --engine-env HTTPS_PROXY=https://example.com:8080 --engine-env NO_PROXY=example2.com 默认

    参考:https://docs.docker.com/v17.12/machine/reference/create/#specifying-docker-swarm-options-for-the-created-machine

    这个解决方案绝对适合我。

    【讨论】:

    • 其实不用编辑start.sh。只需在第一次运行 Docker 之前将 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 定义为环境变量,start.sh 将在 docker-machine create 命令中使用它们。
    【解决方案3】:

    我通过在 config.json 文件的代理设置中的代理 URL 末尾添加尾部反斜杠 ("/") 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-19
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多