我在 Windows 上运行 Docker(boot2docker + Oracle Virtual Box)。在我的公司环境中,他们修改证书,使 CA 成为公司的自签名 CA。因此,链条最终是这样的:
Company's CA
|__
Company's Intermediate CA
|__
Docker Certificate
当我尝试运行任何命令时,例如:
docker run hello-world
我收到此错误:
Get https://index.docker.io/v1/repositories/library/hello-world/images: x509: certificate signed by unknown authority
我已经找到了这个问题的几个答案,但总是针对 Linux 环境。如何在 Windows 中解决此问题?
最佳答案
这个普遍问题已经困扰我几个月了。我在尝试让本地虚拟机获取 Python 包时首先注意到它,所以我已经知道证书将是一个问题。我为我的虚拟机解决了这个问题,但直到今天才能够为 Docker 制定解决方案。诀窍是将证书添加到 Docker 的证书存储中并让它们持久存在。这是通过使用每次机器启动时执行的 bootlocal.sh 脚本来完成的。
我假设如果您已经找到了 Linux 的答案,那么您已经知道了第一步。为了全面起见,我将在此处记录它们,因为其他人可能还没有做到这一点。如果您已经通过之前的尝试完成了 #1 和 #2,请从下面的 #3 开始。
获取企业根证书集,应将其安装在企业配置的浏览器中。在 Chrome 中,您可以转到设置,单击显示高级设置,然后向下滚动到 HTTPS/SSL,您可以在其中选择管理证书。我的组织已将它们放在受信任的根证书颁发机构中,并以组织的名字命名。导出每个(我有两个),一次一个。您可以选择 DER 格式 并执行下面的步骤 #2 以转换为 PEM,或者您可以选择 Base-64 编码 x.509 (.CER) 并将扩展名重命名为 .pem 并跳过第 2 步。
将它们保存到已知位置后,您需要将它们转换为 PEM 格式,除非您另存为 duch。我发现最简单的方法是在 Docker 快速启动终端中运行 openssl.exe[1] 命令。
openssl x509 -inform der -in certificate.cer -out certificate.pem
获得 .pem 文件后,您需要将它们复制到 Docker 机器可以访问的位置。通常对于 MS Windows,主机的/c/Users 会自动安装在 docker 机器中。我在 c:\Users\my.username\certs 中创建了一个目录并将它们复制到那里。
这一步可能不是绝对必要的,但这是我所做的,并且有效。您需要将这些证书复制到您的 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 && chmod +x /var/lib/boot2docker/bootlocal.sh
vi /var/lib/boot2docker/bootlocal.sh
插入以下内容并保存文件:
#!/bin/sh
mkdir -p /etc/docker/certs.d && cp /var/lib/boot2docker/certs/*.pem /etc/docker/certs.d
使用机器内部的 reboot 命令或 Docker 终端的 docker-machine 命令重新启动机器:
docker-machine restart default
现在您应该可以运行“hello-world”等。我希望这会有所帮助。
来源
[1] https://serverfault.com/questions/254627/how-to-convert-a-cer-file-in-pem
[2] https://github.com/boot2docker/boot2docker/issues/347#issuecomment-189112043
关于windows - Windows 上的 Docker (Boot2Docker) - 证书由未知权限错误签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31205438/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o