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

Docker 拉取镜像:SSL 拦截与国内镜像源失效问题解决

目录

  • 前言
  • 配置的国内镜像失效
  • SSL证书拦截(故障原因)
  • 解决SSL问题
    • 指定国内镜像
    • 阿里镜像加速器(最终方案)
      • 镜像加速器作用
      • 配置方式

前言

这篇博客主要总结一下,我最近用docker在centos7虚拟机上部署Elasticsearch时遇到的国内镜像源失效、 SSL 证书拦截导致官方连接失败,且直接使用国内镜像源路径错误,最终通过配置阿里云镜像加速器彻底解决,如果只想学习怎么配置镜像加速器,直接看最后一个小结即可。

配置的国内镜像失效

虽然我们在docker的配置文件daemon.json中配置了多个国内镜像源,但是如果出现以下几种情况,docker会自动退回到从docker官方仓库中拉取镜像,并不是强制使用配置的镜像源拉取镜像。

  • 若/etc/docker/daemon.json文件中镜像源配置存在拼写错误、结构不正确等问题,会导致 Docker 无法正确识别和使用配置的镜像源,从而只能从官方仓库拉取。此外,配置完成后如果没有重启 Docker 服务,新的配置也不会生效。
  • 国内镜像源未同步或不稳定:某些官方镜像可能在国内镜像源中尚未同步,或者国内镜像源本身存在不稳定、已失效等情况。例如https://registry.docker-cn.com就经常出现不可用的情况,此时 Docker 会转而从官方仓库拉取镜像。
  • 镜像名称和标签特性:部分特殊的镜像 tag 或 namespace,如docker-library下的镜像,可能会绕过加速器设置,直接从官方仓库拉取

这是几种比较常见的国内镜像源失效的原因,因此,不是配置了国内镜像源就万事大吉

SSL证书拦截(故障原因)

  • 虽然配置的国内镜像源失效,但是docker仍会从官方仓库中正常拉取指定镜像,只是速度可能比较慢,但是我在拉取Elasticsearch镜像时发生了如下错误
    在这里插入图片描述

  • 看起来是网络连接错误,好像是dns解析域名错误,网络问题很好排查,我们直接通过ping命令,ping镜像域名,看看能不能ping通,能ping通就是基础网络连接没问题,ping不同就是dns配置问题。
    在这里插入图片描述

  • 可以看到网络是可以ping通的,说明dns域名解析和基础网络连接时没有问题的,我们再通过 openssl s_client 工具深度检查 HTTPS 连接,发现关键异常:

    # 其他镜像排查https问题,只需要替换这个命令中的域名即可
    openssl s_client -connect docker.elastic.co:443 -showcerts
    

    输出核心错误:

    depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
    verify error:num=21:unable to verify the first certificate
    
  • 现在问题原因就比较清晰了,是https应用层建立连接失败,原因简单说,https是在建立安全连接时,会检查对方携带回来的证书,如果证书校验不通过就会停止建立连接。

  • 这次碰到的问题是,网络中存在 中间人设备(如公司代理、防火墙、Kubernetes Ingress 控制器),其会强制拦截所有 HTTPS 流量,并将目标服务器的合法 SSL 证书替换为自签名的 “伪造证书”(本次为 Kubernetes Ingress Controller Fake Certificate)

  • Docker 遵循 HTTPS 安全协议,会校验证书的合法性 —— 当发现证书并非 Elastic 官方签发时,直接拒绝建立连接,导致镜像拉取失败

解决SSL问题

指定国内镜像

  1. 想到的第一个办法就是还是不从官方仓库中拉取镜像,首选还是从国内镜像仓库中拉取镜像,因此,我们在拉取镜像时可以直接指定镜像源,本次我指定的是阿里镜像源

    docker pull registry.cn-hangzhou.aliyuncs.com/elastic-stack/elasticsearch:7.17.20
    
  2. 但是指定镜像源拉取镜像还是失败,原因是elastic-stack 命名空间下并未存储 7.17.20 版本的 Elasticsearch 镜像
    在这里插入图片描述

  3. 因此,直接使用国内镜像源的痛点就是镜像版本不全,多数国内镜像源仅同步镜像的热门版本,路径难寻:不同厂商的镜像命名空间不统一(如阿里云可能在 library/ 下,网易云在 elastic/ 下),需逐一搜索验证,效率低。

阿里镜像加速器(最终方案)

最后还是通过配置阿里镜像加速器解决了这个问题,让镜像加速器代理我们从官方仓库中拉取镜像,然后发给我们。

镜像加速器作用

  • 阿里云镜像加速器并非提供 “镜像副本”,而是作为 官方仓库的代理缓存—— 当 Docker 拉取官方镜像时,请求会先经过加速器,由加速器从官方仓库获取镜像并缓存,再转发给本地 Docker
  • 该方案会绕开网络中的 SSL 拦截:本地 Docker 连接的是阿里云加速器(HTTPS 证书合法),而非直接连接镜像的官方仓库
  • 并且我们不需要修改镜像的路径,直接保持镜像的原路径拉取镜像即可
  • 阿里云作为大型云服务商,其服务器网络通常不会有证书拦截问题,能直接与 Elastic 官方仓库建立合法的 HTTPS 连接

配置方式

  1. 登录阿里云官网阿里云容器镜像服务,按照指示注册账号,登录

  2. 点击左侧镜像加速器
    在这里插入图片描述

  3. 点进来之后,复制你的专属加速器地址
    在这里插入图片描述

  4. 通过vim或者其他方式修改docker配置文件/etc/docker/daemon.json内容,将复制的镜像加速器地址放在镜像列表第一个,配置完成后,你的配置文件应该是这样的内容
    在这里插入图片描述

  5. 重启docker,让其能够加载变更后的配置文件内容

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  6. 重新拉取镜像,docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.20,成功。
    在这里插入图片描述

http://www.dtcms.com/a/560910.html

相关文章:

  • full join优化改写经验
  • 软件测试:黑盒测试用例篇
  • 【Linux】Linux第一个小程序 - 进度条
  • ubuntu新增用户
  • 青州市网站建设长沙招聘网58同城招聘发布
  • 江苏中南建设集团网站是多少长沙互联网网站建设
  • 从零开始的云原生之旅(十一):压测实战:验证弹性伸缩效果
  • 民宿网站的建设wordpress gallery
  • 【开题答辩全过程】以 广州网红点打卡介绍网站为例,包含答辩的问题和答案
  • Taro 源码浅析
  • Chart.js 混合图:深度解析与应用技巧
  • redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
  • 监视你的脚本:自动 Linux 活动审计
  • 15.1.2.linux常见操作用例
  • 【Java Web学习 | 第五篇】CSS(4) -盒子模型
  • ubuntu samba 快速安装启用
  • 【数据结构】用顺序表实现通讯录
  • cpp / c++零基础就业学习一站式学习平台
  • FreeRTOS(二)
  • 开源AI智能名片链动2+1模式S2B2C商城小程序商业化路径优化研究
  • 中国优秀的企业网站做搜狐网站页面
  • 【效率工具】EXCEL批注提取工具
  • Python openpyxl 设置Excel单元格公式和工作簿合并
  • 作文生成器网站北京seo招聘信息
  • 常州网站设计制作贵美商城网站的首页怎么做代码
  • 新媒体矩阵系统全景解析:赋能企业数字化营销的智能引擎
  • 多目标优化问题在适应度计算中的支配矩阵
  • 从零开始的云原生之旅(九):云原生的核心优势:自动弹性伸缩实战
  • 【Swift】LeetCode 240.搜索二维矩阵 II
  • 矩阵(板子)