构建dockerfile时tls证书失败

xsuvu9jc  于 2023-10-16  发布在  Docker
关注(0)|答案(2)|浏览(155)

我见过很多类似的问题,但似乎没有一个解决方案适用于我的情况。我正在使用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?
jjjwad0x

jjjwad0x1#

主要是复制"docker pull" certificate signed by unknown authority,指向https://docs.docker.com/registry/insecure/
我也试过[--tls选项在CLI]起初,它看起来像一个进步.
不,这不是进步,这是倒退。当它甚至不能 try 连接到守护进程时,这是一个错误,早在守护进程执行构建文件中的FROM之前。
CLI中的--tls适用于CLI和守护程序之间的连接;它与守护进程为获取FROMpull的映像而与注册表建立的连接完全无关。除非您希望(或需要)从守护程序远程运行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。

nkoocmlb

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。这一切似乎都在起作用,除了这次我得到了以下信息:

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(这确实是我最初的问题)。再次感谢你,我对这个证书的东西很陌生,只是需要一些指导。

相关问题