我使用的是Docker Engine 2.0.0.0-win77 (28777)版本。在我的macOS上,我已经成功地从公司的私有docker注册表中拉取了镜像。现在我想在我的Windows机器上做同样的事情。在进行任何操作之前,我已经:
> docker pull <company.docker.url>/<some image>
Error response from daemon: Get https://<company.docker.url>/v2/: x509: certificate signed by unknown authority
然后,我将证书导入到Windows用户证书存储中。 现在我有:
> docker pull <company.docker.url>/<some image>
Error response from daemon: Get https://<company.docker.url>/v2/: remote error: tls: handshake failure
在这次失败后,我尝试了以下操作:
- 将证书导入到我的Windows全局证书存储中。
将文件
client.cert
、client.key
和ca.crt
复制到我的Windows 10电脑中的以下目录:C:\ProgramData\Docker\certs.d\<company.docker.url>\
C:\Users\<user>\.docker\certs.d\<company.docker.url>\
遗憾的是,我仍然遇到了这个问题:
> docker pull <company.docker.url>/<some image>
Error response from daemon: Get https://<company.docker.url>/v2/: remote error: tls: handshake failure
需要注意的两件事情:
- 如果我切换到Windows容器,我可以成功登录或拉取镜像,只有在Linux容器版本中才失败。
- 我的私人证书由一个中间证书签署,并且该中间证书包含在我的
client.cert
中。
我阅读过的一些参考文献:
docker --tls-cert=C:\ProgramData\Docker\certs.d\docker.company.net\client.cert --tls-key=C:\ProgramData\Docker\certs.d\docker.company.net\client.key --tls-cacert=C:\ProgramData\Docker\certs.d\docker.company.net\ca.crt pull <company.docker.url>/<some image>
。参考:https://docs.docker.com/engine/reference/commandline/cli/ - Robert--tls*
选项用于连接正在本地主机上运行的docker守护进程。我的问题是无法连接远程docker仓库。 - Elderryerror during connect: Post https://127.0.0.1:2376/v1.37/images/create?fromImage=docker.compayn.net%2Ftradeshift-proxy&tag=148fbf3b3db5849f73675147c0f14def8766ee21: dial tcp 127.0.0.1:2376: connectex: No connection could be made because the target machine actively refused it.
可以看到它试图连接 127.0.0.1。 - Elderry