首页 > 解决方案 > Docker CLI、Podman 和其他类似工具是否可以为图像共享本地存储?

问题描述

我最近开始使用 podman,并意识到通过 docker 拉取的图像无法用于 podman,反之亦然。例如:-

如果我使用 docker CLI 拉取镜像,如下所示

docker pull registry.access.redhat.com/ubi7-minimal

如果我想在 podman 或 buildah 中使用相同的图像,结果我不能

[riprasad@localhost ~]$ podman inspect registry.access.redhat.com/ubi7-minimal
Error: error getting image "registry.access.redhat.com/ubi7-minimal": unable to find 'registry.access.redhat.com/ubi7-minimal' in local storage: no such image

我知道这是因为 podman 和 docker 都使用不同的存储位置,因此通过 docker 下拉的图像无法与 podman 一起使用,反之亦然。

[riprasad@localhost ~]$ docker images
REPOSITORY                                                                                 TAG                 IMAGE ID            CREATED             SIZE
registry.access.redhat.com/ubi7-minimal                                                    latest              fc8736ea8c5b        5 weeks ago         81.5MB

[riprasad@localhost ~]$ podman images
REPOSITORY   TAG   IMAGE ID   CREATED   SIZE

有没有办法缓解这个问题,并以某种方式使 docker 和 podman 在同一个图像上可互换地工作,无论它是通过 docker 还是 podman 拉下来的?

标签: dockerdockerfilepodmanbuildahdocker-cli

解决方案


Docker 和 Podman 不确定存储是否相同。他们不能,因为 Docker 控制在守护进程中对其存储的锁定。Podman、Buildah、CRI-O、Skopeo 都可以共享内容,因为它们使用文件系统。

Podman 和其他工具可以通过“docker-daemon”传输间接使用 docker-daemon 存储。

就像是:

podman 运行 docker-daemon:alpine echo hello

应该管用。

请注意,podman 是从 docker 守护进程中提取图像并将图像存储在容器/存储中,然后运行容器,它不直接使用 Docker 存储。

你也可以做

podman push myimage docker-daemon:myimage

将容器/存储中的图像复制到 docker 守护程序中。


推荐阅读