当前位置: 首页 > article >正文

自签证书的dockerfile中from命令无法拉取镜像而docker的pull命令能拉取镜像

 问题现象:

docker pull images拉取镜像正常

dockerfile中的from命令拉取镜像就会报出证书错误。报错信息如下:

[bjxtb@wj-kvm-test-jenkins-6-243 ceshi_dockerfile]$ docker build .
[+] Building 0.4s (3/3) FINISHED                                                                                                                                                                   docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                         0.0s
 => => transferring dockerfile: 273B                                                                                                                                                                         0.0s
 => ERROR [internal] load metadata for hub:10043/base_java/debian-jdk8-base:1.0.2                                                                                                            0.3s
 => [auth] base_java/debian-jdk8-base:pull token for hub:10043                                                                                                                               0.0s
------
 > [internal] load metadata for hub:10043/base_java/debian-jdk8-base:1.0.2:
------
Dockerfile:1
--------------------
   1 | >>> FROM hub:10043/base_java/debian-jdk8-base:1.0.2
   2 |     WORKDIR /hskj/app
   3 |     
--------------------
ERROR: failed to solve: hub:10043/base_java/debian-jdk8-base:1.0.2: failed to resolve source metadata for hub.:10043/base_java/debian-jdk8-base:1.0.2: failed to authorize: failed to fetch oauth token: Post "https://hub:10043/service/token": tls: failed to verify certificate: x509: certificate signed by unknown authority

尝试各种方法:

/etc/docker/daemon.json文件添加如下参数

insecure-registries

/etc/docker/certs.d/配置免密

两种往上常见方式都无果,最终找到一篇文章:

解决思路:把证书直接用openssl拉下来,然后加入到系统系统证书中,然后使用update-ca-certificates更新,最后重启docker服务,成功!!

方法1:

$ echo -n | openssl s_client -showcerts -connect dseasb33srnrn.cloudfront.net:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/cloudfront.crt
$ update-ca-certificatesUpdating certificates in /etc/ssl/certs... 1 added, 0 removed; done.Running hooks in /etc/ca-certificates/update.d....Adding debian:cloudfront.pemdone.done.

 方法2:

$ echo -n | openssl s_client -showcerts -connect dseasb33srnrn.cloudfront.net:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> /etc/ssl/certs/ca-certificates.crt

方法3:

自签证书换为商用证书也可解决。 

上面的方式之所以可以搞定大多数由于公司替换https证书造成的错误,是因为很多程序是使用系统默认的证书(路径)。

对于一些特殊的程序,比如python pip,不使用系统默认的证书,而是使用自己的路径,可以强制它使用*方式2*生成的证书。

参考连接:docker X509 证书错误的终极解决办法 - 孤独的居士 - 博客园


http://www.kler.cn/a/520932.html

相关文章:

  • 2024年除夕
  • 速通Docker === Docker Compose
  • 公式与函数的应用
  • 深度剖析C++17中的std::optional:处理可能缺失值的利器
  • Swoole的MySQL连接池实现
  • TOGAF之架构标准规范-信息系统架构 | 数据架构
  • 嵌入式基础 -- PCIe 控制器中断管理之MSI与MSI-X简介
  • 【Linux】线程、线程控制、地址空间布局
  • 【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)
  • react native在windows环境搭建并使用脚手架新建工程
  • 深入剖析SpringBoot启动机制:run()方法详尽解读
  • STM32 光敏电阻传感器与蜂鸣器配置
  • Element使用表单重置如果不使用prop,重置无法生效
  • flink写parquet解决timestamp时间格式字段问题
  • 【已解决】黑马点评项目Redis版本替换过程的数据迁移
  • Flowmix/Docx 多模态文档编辑器: 让文档不止于文档
  • Protobuf序列化协议使用指南
  • 基于微信小程序的移动学习平台的设计与实现 移动学习平台(源码+文档)
  • Ubuntu20.04 运行 Cartographer demo bag
  • Ubuntu-手动安装 SBT
  • 物联网MQTT协议及本地化部署测试
  • doris:ORC
  • 每日 Java 面试题分享【第 9 天】
  • HTTP(1)
  • Golang Gin系列-9:Gin 集成Swagger生成文档
  • GPT 结束语设计 以nanogpt为例