image - 为什么 Podman 试图从文件加载后提取已经存在的图像?
问题描述
我正在运行与 Podman 一起打包的 Fedora CoreOS 的气隙环境中工作。我有几个容器图像,我一直在努力将它们传输到气隙环境中。为了做到这一点,我遵循了以下步骤:
- 我在一台可以上网的机器上获取图像。一些图像是从我的 Docker 注册表中拉入 Podman 的,
podman pull docker-daemon:docker.io/my-example-image:latest
而另一些是使用podman pull
. - 我使用(例如)将图像保存到 tar 文件
podman save docker.io/my-example-image:latest -o my-example-image.tar
- 我将 tar 文件传输到物理介质上的气隙环境并使用
podman load -i my-example-image.tar
当我使用它们检查图像时,podman images
它们都出现在图像列表中。但是,如果我尝试从这些图像之一运行容器,使用时sudo podman run docker.io/my-example-image
会收到一条很长的错误消息:
Trying to pull docker.io/my-example-image
Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on [::1}:53: read udp [::1]:50762 ->
[::1]:53: read: connection refused
Error: unable to pull docker.io/my-example-image: Error initializing source docker://my-example-image:latest:
error pinging docker registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": dial tcp: lookup
registry-1.docker.io on [::1]:53: read udp [::1]50762 -> [::1]:53: read: connection refused
对于从其他存储库获取的图像,我收到了类似的消息,例如quay.io
在我看来,该错误是由机器无法与注册表建立连接引起的,考虑到环境是气隙的,这对我来说很有意义。但是我不确定为什么 podman 甚至试图在它们已经存在于环境中时尝试提取这些图像,正如podman images
我尝试使用各种方法在podman run
命令中引用图像,包括
sudo podman run docker.io/my-example-image:latest
sudo podman run my-example-image
sudo podman run my-example-image:latest
我曾尝试寻找解决此问题的方法,但无济于事,非常感谢有关此问题的任何指导。
解决方案
每个用户都有自己的容器存储。
用户root使用目录/var/lib/containers/
普通用户使用目录~/.local/share/containers/
该命令
podman load -i my-example-image.tar
将使用目录~/.local/share/containers/
该命令
sudo podman run docker.io/my-example-image
将使用目录/var/lib/containers
如果您想在用户之间共享只读容器存储,请查看文件storage.conf中的设置Additionalimagestores
[storage.options]
additionalimagestores = [ "/var/lib/mycontainers",]