首页 > 解决方案 > 为什么 Podman 试图从文件加载后提取已经存在的图像?

问题描述

我正在运行与 Podman 一起打包的 Fedora CoreOS 的气隙环境中工作。我有几个容器图像,我一直在努力将它们传输到气隙环境中。为了做到这一点,我遵循了以下步骤:

  1. 我在一台可以上网的机器上获取图像。一些图像是从我的 Docker 注册表中拉入 Podman 的,podman pull docker-daemon:docker.io/my-example-image:latest而另一些是使用podman pull.
  2. 我使用(例如)将图像保存到 tar 文件podman save docker.io/my-example-image:latest -o my-example-image.tar
  3. 我将 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

我曾尝试寻找解决此问题的方法,但无济于事,非常感谢有关此问题的任何指导。

标签: imagecontainerscoreospodman

解决方案


每个用户都有自己的容器存储。

用户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",]

参考: https ://www.redhat.com/sysadmin/image-stores-podman


推荐阅读