构建dockerfile时tls证书失败

问题描述 投票:0回答:2

我见过很多类似的问题,但似乎没有一个解决方案适合我的情况。 我正在使用在 Windows 上通过 WSL2 模拟的 Ubuntu,并且尝试从 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

其中 是一些公司网址,我不确定是否可以在这里分享,但我认为它无论如何都不相关。 我认为共享 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?
docker ssl ssl-certificate
2个回答
0
投票

主要是欺骗“docker pull”证书由未知机构签名,它指向https://docs.docker.com/registry/insecure/

我也尝试过[CLI 上的

--tls
选项] 起初,它看起来像是一个进步....

不,这不是进步,这是倒退。当它甚至无法 try 连接到守护进程时,早在守护进程执行构建文件中的 FROM 之前就会出现错误。

CLI中的

--tls
适用于CLI和守护进程之间的连接;它与守护进程为获取图像而与注册表建立的连接完全无关,如
FROM
pull
。除非您想要(或需要)从守护程序远程运行 CLI,否则使用默认的 Unix 套接字或 Windows 命名管道比管理 TLS 或 SSH 连接更容易。

您需要为daemon提供“CA”证书(我不确定它是否需要专门的根证书或只是一个锚点;SSL/TLS 堆栈在这方面有所不同,而且我没有自己的注册表测试)或使 CA 在您的(实际上是守护进程的)底层系统上受信任(对于 Ubuntu,请参阅

man update-ca-certificates
)(并根据上面的链接反弹守护进程)或配置 daemon 以接受不安全的注册表;请参阅https://docs.docker.com/engine/reference/commandline/dockerd/#insecure-registries,特别是https://docs.docker.com/registry/insecure/#use-self-signed-certificates .


0
投票

非常感谢! 以下是我如何解决问题的完整摘要: 我已经尝试了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。 这一切似乎都有效,除了这次我得到了以下结果:

docker build --tag build_machine .
[+] Building 0.4s (3/3) FINISHED                                                                                                                                                                                                                                                                              docker:default
 => [internal] load .dockerignore                                                                                                                                                                                                                                                                                       0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                                                         0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                                                    0.0s
 => => transferring dockerfile: 4.77kB                                                                                                                                                                                                                                                                                  0.0s
 => ERROR [internal] load metadata for <some_url>/centos:7                                                                                                                                                                                                                                                    0.3s
------
 > [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 authorize: failed to fetch anonymous token: unexpected status from GET request to https://<some_other_url>: 401 Unauthorized

此时,我被告知我根本无法访问公司注册表,因此我切换到标准注册表(即将

FROM <some_url>/centos:7
更改为简单的
FROM centos:7
),但至少我设法通过VPN(这确实是我最初的问题)。 再次非常感谢您,我对这个证书的东西很陌生,只需要一些指导。

© www.soinside.com 2019 - 2024. All rights reserved.