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

docker引擎备份及解决拉取失败的问题

总结一下本文,docker引擎不是越多越好,此外阿里云的容器引擎加速可适用大多数情况。

docker引擎备份

仅使用阿里云

docker引擎备份,唯一使用的镜像地址是我的阿里云docker镜像加速地址,效果好(注意下面的阿里云镜像加速地址要替换成你自己的)。地址参考:阿里云容器镜像服务。

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://youraliyuncode.mirror.aliyuncs.com"]
}

其它docker引擎备份

额外的镜像地址,某些地址会引起拉取镜像失败。

    "https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://cr.console.aliyun.com/","https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://alzgoonw.mirror.aliyuncs.com"

问题的由来

我尝试在dify中启用searXNG,需要执行命令:

docker run --rm -d -p 8081:8080 -v "${PWD}/api/core/tools/provider/builtin/searxng/docker:/etc/searxng" searxng/searxng

命令解读

这条docker run命令是用来在Docker容器中启动一个服务(在这个情况下是SearXNG),并且配置了多个选项来控制容器的行为。下面是对每个参数的详细解读:

  • docker run: 这是用于启动一个新的容器的Docker命令。

  • --rm: 当容器退出时,自动删除该容器。这有助于保持系统的整洁,避免留下停止但未删除的容器。

  • -d: 以分离模式(后台运行)启动容器。这意味着容器将在后台运行,而不是占用当前终端。

  • -p 8081:8080: 将主机的端口8081映射到容器内的端口8080。这意味着你可以通过访问主机上的8081端口来与容器内部运行的服务(监听在8080端口上)进行通信。

  • -v "${PWD}/api/core/tools/provider/builtin/searxng/docker:/etc/searxng": 这是一个卷挂载选项,将主机上的目录${PWD}/api/core/tools/provider/builtin/searxng/docker挂载到容器内的/etc/searxng路径。这里${PWD}代表当前工作目录的环境变量值,使得无论从哪个目录执行此命令,都会使用当前目录作为起点来寻找指定的本地路径。这个选项通常用于让容器能够访问主机文件系统中的特定配置或数据文件。

  • searxng/searxng: 指定了要使用的镜像名称。Docker会尝试从Docker Hub下载名为searxng/searxng的最新版本镜像(如果你本地没有的话),然后基于这个镜像创建并启动新的容器。

总结来说,这条命令的作用是以分离模式在后台启动一个SearXNG服务的容器,它将主机的8081端口请求转发给容器内的8080端口,并且将当前目录下的api/core/tools/provider/builtin/searxng/docker目录挂载到容器内的/etc/searxng目录下,以便于配置和数据共享。同时,当容器停止时,它会自动被移除。

执行效果

可惜执行起来会报错:

Unable to find image 'searxng/searxng:latest' locally
docker: Error response from daemon: failed commit on ref "unknown-sha256:391a2ad1486f55c46728d4d466cad83fd3f44627222bd555c3c83bf2e1a39948": commit failed: "unknown-sha256:391a2ad1486f55c46728d4d466cad83fd3f44627222bd555c3c83bf2e1a39948" failed size validation: 7616 != 7293: failed precondition.
See 'docker run --help'.

在这里插入图片描述

报错解读

这个报错信息表明在尝试运行searxng/searxng:latest镜像时,Docker遇到了几个问题:

  1. 找不到本地镜像:首先,错误信息中的第一行“Unable to find image ‘searxng/searxng:latest’ locally”表示你的系统中没有名为searxng/searxng:latest的Docker镜像。这意味着Docker将尝试从Docker Hub下载该镜像。

  2. 下载或验证失败:接下来的部分指出,在尝试从Docker Hub下载该镜像或将下载的数据提交到本地存储库时发生了错误。“failed commit on ref…”这部分说明了具体的错误发生在尝试提交一个引用(即下载的镜像部分)到本地仓库的过程中。这里提到的unknown-sha256:391a2ad1486f55c46728d4d466cad83fd3f44627222bd555c3c83bf2e1a39948是一个SHA-256哈希值,用于唯一标识下载的数据块。

  3. 校验和验证失败:更具体地,“failed size validation: 7616 != 7293”指出下载的数据块未能通过大小验证检查。这里的数字分别代表了实际下载的数据大小和预期的数据大小,它们不匹配,导致了“failed precondition”的错误。这种情况可能是因为网络问题、文件损坏或者Docker Hub上的镜像本身存在问题。

问题的解决

解决方案

  • 尝试重新拉取镜像:首先尝试手动删除并重新拉取镜像,这可以解决由于网络问题或文件损坏导致的问题。
    shell docker rmi searxng/searxng:latest docker pull searxng/searxng:latest ‍

  • 检查是否有特定版本标签可用:有时latest标签可能会有问题。你可以访问Docker Hub上的SearXNG页面查看并选择一个特定版本的标签来代替latest使用。

  • 确保有足够的磁盘空间:确保你的系统上有足够的磁盘空间来下载和存储新的Docker镜像。

  • 更新Docker:确保你正在使用的Docker是最新版本,因为旧版本可能存在已知的问题或bug。

如果上述步骤无法解决问题,可能是Docker Hub上的searxng/searxng:latest镜像存在一些问题。在这种情况下,建议关注相关项目的公告或联系维护者获取更多信息。同时,也可以考虑在社区论坛或项目GitHub问题页面上寻求帮助。

尝试手动拉取

即使尝试手动拉取,也会报错:
在这里插入图片描述
所以问题明白了,本地没有镜像,自动执行拉取镜像时失败,理由是docker hub里最新镜像验证失败。

网络方法

网上给的方法是:

1、增加docker引擎镜像地址;

2、指定镜像版本。

我都试了,都没用。于是我想,是不是docker引擎镜像地址出错了,比如有一个有问题的地址在捣乱。。。于是我尝试仅保留我的阿里云镜像加速地址,那个相对可靠。

最终解决办法

果然,在将阿里云容器镜像加速地址作为唯一docker引擎地址后,镜像拉取非常顺利,问题解决。
在这里插入图片描述

http://www.lryc.cn/news/546997.html

相关文章:

  • Django项目实战
  • 【ThreeJS Basics 1-6】Camera
  • SpringBoot-模拟SSE对话交互
  • 删除链表的倒数第N个节点 力扣19
  • IvorySQL v4 逻辑复制槽同步功能解析:高可用场景下的数据连续性保障
  • vxe-table开启表尾和el-collapse-transition不兼容,动画卡顿
  • 康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术
  • golang学习笔记——go语言安装及系统环境变量设置
  • Redis|集群 Cluster
  • 解锁MacOS开发:环境配置与应用开发全攻略
  • 如何通过卷积神经网络(CNN)有效地提取图像的局部特征,并在CIFAR-10数据集上实现高精度的分类?
  • 监听 RabbitMQ 延时交换机的消息数、OpenFeign 路径参数传入斜杠无法正确转义
  • 希音(Shein)前端开发面试题集锦和参考答案
  • python全栈-Linux基础
  • DeepSeek R1助力,腾讯AI代码助手解锁音乐创作新
  • Git安装与配置
  • 【Linux】自定协议和序列化与反序列化
  • C++基础系列【19】运算符重载
  • Python-04BeautifulSoup网络爬虫
  • 芯科科技通过全新并发多协议SoC重新定义智能家居连接
  • python-leetcode-零钱兑换 II
  • 【RabbitMQ】Producer之TTL过期时间 - 基于AMQP 0-9-1
  • 演示汉字笔顺的工具
  • JVM简单了解
  • 【CSS—前端快速入门】CSS 选择器
  • 【MYSQL数据库异常处理】执行SQL语句报超时异常
  • 【Day9】make/makeFile如何让项目构建自动化起飞
  • 【单片机】嵌入式系统的硬件与软件特性
  • C语言学习笔记-初阶(30)深入理解指针2
  • ROM修改进阶教程------修改安卓机型SELinux宽容的几种方式方法 以及第三方系统中如何关闭SELinux宽容