【发布时间】:2018-10-29 03:24:59
【问题描述】:
根据我的公司政策,我们使用的是 Windows 7,在机器上具有特权访问(管理员权限的子集)。
我已经安装了 docker 工具箱,但是当需要从 Artifactory 公司的 Docker 中心提取图像时,由于 HTTPS 和代理,我遇到了问题。
【问题讨论】:
标签: docker docker-machine docker-toolbox
根据我的公司政策,我们使用的是 Windows 7,在机器上具有特权访问(管理员权限的子集)。
我已经安装了 docker 工具箱,但是当需要从 Artifactory 公司的 Docker 中心提取图像时,由于 HTTPS 和代理,我遇到了问题。
【问题讨论】:
标签: docker docker-machine docker-toolbox
我终于弄清楚了如何在 Windows 7 上使用 HTTPS 证书在企业代理后面正确设置 docker 工具箱。
以下是步骤
C:/Users/<user>/.docker/machine/machines/default打开config.json。如果您没有该文件夹,请从您的桌面打开“Docker Quickstart Terminal”,为自己创建一个虚拟盒子 docker-machine。{ "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。
完成上述步骤后,需要安装公司证书
获取企业根证书集,应将其安装在企业配置的浏览器中。在 Chrome 中,您可以转到设置,单击显示高级设置,然后向下滚动到 HTTPS/SSL,您可以在其中选择管理证书。我的组织已将它们放入受信任的根认证机构,并以组织的名字命名。每次导出一个(我有两个),确保选择 DER 格式。
将它们保存到已知位置后,您需要将它们转换为 PEM 格式。我发现最简单的方法是在 Docker 快速启动终端中运行 openssl.exe[1] 命令。
openssl x509 -inform der -in certificate.cer -out certificate.pem
获得 .pem 文件后,您需要将它们复制到 Docker 机器可以访问的位置。我在c:\Users\my.username\certs 中创建了一个目录并将它们复制到那里。
此步骤可能不是绝对必要的,但这是我所做的,并且有效。您需要将这些证书复制到您的 boot2docker 分区中,该分区是持久的。我正在连接到我的默认计算机,这是您在第 5 步中需要执行的操作。
MINGW64:$
docker-machine ssh defaultdocker@default:~$
sudo -sroot@default:/home/docker#
mkdir /var/lib/boot2docker/certsroot@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 && 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
【讨论】:
我最近遇到了同样的问题,并且能够通过以下步骤解决问题。正如官方 docker 文档中所建议的那样
首先,如果已经创建了默认的 docker-machine,则停止并删除它
docker-machine stop default
docker-machine rm default
其中 'default' 是 docker-machine 的默认名称。
删除后使用代理设置创建 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 默认
这个解决方案绝对适合我。
【讨论】:
我通过在 config.json 文件的代理设置中的代理 URL 末尾添加尾部反斜杠 ("/") 解决了这个问题。
【讨论】: