You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用ctr.exe拉取RAGFlow镜像遇路径非法字符错误求助

解决Windows下containerd拉取Linux镜像时的文件名非法字符问题

核心原因

你拉取的docker.io/infiniflow/ragflow:v0.20.0是Linux架构镜像,而Windows系统文件名不允许包含:字符,containerd默认使用的Windows快照器在提取Linux镜像层时,无法处理这类含非法字符的文件路径,导致提取失败。

可行解决方案

方案1:切换使用overlayfs快照器(需WSL2环境)

如果你的Windows 10已启用WSL2,可让containerd用WSL2的overlayfs处理镜像,规避Windows文件系统限制:

  1. 修改containerd配置文件(默认路径C:\ProgramData\containerd\config.toml),添加或修改以下配置:
    [plugins."io.containerd.snapshotter.v1.overlayfs"]
      root_path = "C:\\ProgramData\\containerd\\root\\overlayfs"
    
    [plugins."io.containerd.grpc.v1.cri"]
      snapshotter = "overlayfs"
    
  2. 重启containerd服务:
    Stop-Service containerd
    Start-Service containerd
    
  3. 重新执行拉取命令(注意修正原命令中cert s.d的笔误为certs.d):
    ctr.exe image pull --user dolphin:123456 --hosts-dir="E:\guan\software\terminal\cmder\bin\containerd-2.1.4-windows-amd64\bin\certs.d" docker.io/infiniflow/ragflow:v0.20.0
    

方案2:用Docker Desktop替代直接调用ctr

Docker Desktop会自动适配Linux镜像的文件系统,通过WSL2或虚拟化规避Windows文件名限制:

  1. 安装并启动Docker Desktop,确保启用WSL2后端。
  2. 用docker pull拉取镜像:
    docker pull docker.io/infiniflow/ragflow:v0.20.0
    
  3. 若需用ctr操作Docker Desktop的containerd,可连接其套接字:
    ctr --address npipe:////./pipe/docker_engine_containerd image pull docker.io/infiniflow/ragflow:v0.20.0
    

方案3:手动修改镜像层(复杂不推荐)

若必须用Windows原生containerd,可手动修改镜像层的非法文件名后重新打包:

  1. 导出已下载的镜像为tar包:
    ctr image export ragflow-v0.20.0.tar docker.io/infiniflow/ragflow:v0.20.0
    
  2. 解压tar包,将含:的文件名替换为合法字符(如-)。
  3. 重新打包并导入镜像:
    ctr image import ragflow-v0.20.0-modified.tar
    

补充说明

你检查的snapshots目录为空是因为提取失败后containerd自动清理了临时快照文件,属于正常现象。

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 13:13:16