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

为何`docker image ls`与`ctr image ls`结果不一致?镜像加载后ctr无显示怎么办?

解决Docker与Containerd镜像不互通的问题

核心原因

Docker 默认使用独立的 moby 命名空间来管理镜像和容器,而非你检查的 default 或 k8s.io 命名空间,这就是你在 ctr image ls 里找不到Docker镜像的根本原因。

解决步骤

  1. 查看Docker管理的镜像
    直接指定moby命名空间执行ctr命令,就能看到Docker里的所有镜像:

    ctr -n moby image ls
    

    用docker image load加载的镜像也会存在这个命名空间下,执行上面的命令就能看到。

  2. 将Docker镜像同步到其他命名空间
    如果需要让default或k8s.io命名空间能访问这些镜像,可以通过导出再导入的方式:

    • 先从moby命名空间导出镜像:
      ctr -n moby image export <镜像名>.tar <镜像完整名称:标签>
      
    • 再导入到目标命名空间(比如default):
      ctr -n default image import <镜像名>.tar
      

    也可以用skopeo直接跨命名空间复制(需要先安装skopeo):

    skopeo copy containers-storage:moby/<镜像名:标签> containers-storage:default/<镜像名:标签>
    
  3. 避免后续重复问题的建议

    • 如果是通过ctr管理镜像供K8s使用,直接用ctr -n k8s.io image import加载镜像,不要通过Docker加载。
    • 不要修改Docker的默认命名空间,这可能导致Docker服务异常,保持Docker和Containerd的命名空间隔离是更安全的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:18:14