我见过很多类似的问题,但似乎没有一个解决方案适用于我的情况。我正在使用Ubuntu在Windows上模拟WSL 2,我试图从dockerfile构建一个docker镜像,我得到以下错误:
docker build --tag build_machine .
[+] Building 0.3s (3/3) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 4.77kB 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> ERROR [internal] load metadata for <some_url>/centos:7 0.2s
------
> [internal] load metadata for <some_url>/centos:7:
------
Dockerfile:2
--------------------
1 | # Set parent
2 | >>> FROM <some_url>/centos:7
3 |
4 | # Set working directory
--------------------
ERROR: failed to solve: <some_url>/centos:7: failed to do request: Head "https://<some_url>/v2/centos/manifests/7": tls: failed to verify certificate: x509: certificate signed by unknown authority
哪里<some_url>是一些企业网址,我不确定我可以在这里分享,但我不认为这是相关的。我不认为共享dockerfile本身会有多大帮助,因为你可以从日志中看到,失败发生在第一个FROM指令。我已经读到了几个可以设置的环境变量,但是所有这些似乎都是在图像已经生成之后才应用的,而不是在这个早期阶段。有没有办法绕过证书验证?先谢谢你了。
我尝试编辑/etc/docker/daemon.json
配置文件来禁用tls验证,但是当我尝试重新启动docker守护进程时,我得到一个错误,说配置无效。我怀疑这是因为我真的不知道我应该提供哪种证书。事实上,我也尝试过以下方法(使用--tls选项):
docker --tls build --tag build_machine .
ERROR: open /home/msalis/.docker/ca.pem: no such file or directory
起初,它看起来像一个进步,但是,当我试图提供应该是的证书时,我得到了以下内容:
docker --tls build --tag build_machine .
ERROR: Cannot connect to the Docker daemon at tcp://localhost:2376. Is the docker daemon running?
2条答案
按热度按时间jjjwad0x1#
主要是复制"docker pull" certificate signed by unknown authority,指向https://docs.docker.com/registry/insecure/
我也试过[
--tls
选项在CLI]起初,它看起来像一个进步.不,这不是进步,这是倒退。当它甚至不能 try 连接到守护进程时,这是一个错误,早在守护进程执行构建文件中的FROM之前。
CLI中的
--tls
适用于CLI和守护程序之间的连接;它与守护进程为获取FROM
或pull
的映像而与注册表建立的连接完全无关。除非您希望(或需要)从守护程序远程运行CLI,否则使用默认的Unix套接字或Windows namedpipe比管理TLS或SSH连接更容易。您需要给予 daemon“CA”证书(我不确定它是否需要根目录或只是一个锚; SSL/TLS堆栈在这方面有所不同,我没有自己的注册表来测试),或者让CA在你的(实际上是守护程序的)底层系统上受到信任(对于Ubuntu,请参阅
man update-ca-certificates
)(并根据上面的链接反弹守护程序),或者配置 * 守护程序 * 接受不安全的注册表;参见https://docs.docker.com/engine/reference/commandline/dockerd/#insecure-registries,特别是https://docs.docker.com/registry/insecure/#use-self-signed-certificates。nkoocmlb2#
非常感谢您!以下是我如何设法解决我的问题的完整摘要:我尝试了https://docs.docker.com/registry/insecure/中解释的解决方案,但不知何故,我无法正确设置
"insecure-registries"
。然后,我尝试下载证书(在我的情况下,需要两个,而不是一个),但不是将它们复制到/home/msalis/.docker/
(正如我看到误导性跟踪时所想的那样:“错误:打开/home/msalis/.docker/ca.pem:没有这样的文件或目录”),我已经将它们复制到/usr/local/share/ca-certificates/
。然后我按照建议调用了update-ca-certificates
并重新启动了docker。这一切似乎都在起作用,除了这次我得到了以下信息:在这一点上,我被告知,我只是没有访问公司注册表,所以我切换到标准的一个(即。将
FROM <some_url>/centos:7
更改为简单的FROM centos:7
),但至少我设法通过了VPN(这确实是我最初的问题)。再次感谢你,我对这个证书的东西很陌生,只是需要一些指导。