使用ctr拉取的镜像无法通过Docker运行的问题求助
问题原因
ctr是containerd的原生命令行工具,它默认将镜像存储在containerd的default命名空间中,而Docker daemon使用独立的镜像存储体系(实际对应containerd的moby命名空间),两者的镜像池不共享,因此Docker无法识别通过ctr直接拉取的镜像。
解决方案
有两种方式可以解决这个问题:
方式一:直接拉取到Docker对应的命名空间
拉取镜像时指定moby命名空间(Docker默认使用的containerd命名空间),这样Docker就能直接识别到该镜像:
ctr -n moby image pull docker.io/library/python:3.8.18-bookworm
拉取完成后,直接执行运行命令即可:
docker run -it --rm docker.io/library/python:3.8.18-bookworm bash
方式二:导出导入镜像到Docker存储
如果已经用ctr拉取了镜像到默认命名空间,可以通过导出-导入的方式同步到Docker:
- 查看
ctr中的镜像列表,获取目标镜像的名称或ID:
ctr image list
- 将镜像导出为tar包:
# 用镜像名称导出 ctr image export python.tar docker.io/library/python:3.8.18-bookworm # 或者用镜像ID导出 ctr image export python.tar sha256:<你的镜像ID>
- 将tar包导入到Docker:
docker load -i python.tar
- 运行镜像:
docker run -it --rm docker.io/library/python:3.8.18-bookworm bash
内容的提问来源于stack exchange,提问作者Tristan Debas
相关产品推荐
相关产品推荐

