如何通过 podman load/save 离线安装多个镜像

如何通过 podman load/save 离线安装多个镜像

我正在根据图像使用应用程序docker.io/library/mariadb:10.7。可以提取图像并将其保存在 tarball 中:

podman pull \
  docker.io/photoprism/photoprism:latest \
  docker.io/library/mariadb:10.7

podman save \
  -o images.tar \
  docker.io/photoprism/photoprism:latest \
  docker.io/library/mariadb:10.7

并通过以下方式离线安装在不同的系统上load

docker load -i images.tar

上面的命令成功运行,我可以通过以下方式查看图像podman images

REPOSITORY                       TAG         IMAGE ID      CREATED     SIZE
docker.io/photoprism/photoprism  latest      3bd51d37096b  4 days ago  1.33 GB
docker.io/library/mariadb        10.7        3bd51d37096b  4 days ago  1.33 GB

启动docker-compose.ymlviadocker-compose up -d不会立即导致明显的错误。但journalctl -f向我展示了启动和重新启动 mariadb 容器尝试的无休止的错误循环:

container init (image=docker.io/library/mariadb:10.7...
container start(image=docker.io/library/mariadb:10.7...
container died (image=docker.io/library/mariadb:10.7,...
container restart(image=docker.io/library/mariadb:10.7,...
container init(image=docker.io/library/mariadb:10.7,...
#... and so on

现在,这一点很重要:通过docker-compose pull/podman pull直接在线提取图像,否则保持上述步骤 - 仅在同一系统内 - 工作正常!

podman save因此我猜想,这一定是podman load不同机器(相同架构,Fedora)的问题。

读过这个问题我试过

podman unshare podman load -i images.tar

没有成功。

最后一点:podman 在用户空间中运行,如果这很重要的话:

export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/podman/podman.sock
systemctl --user enable --now podman.socket

我如何进一步调试这个问题?可能的原因是什么(用户空间权限,...)以及适当的修复方法?

答案1

-m经过更多调查:在 tarball 中保存多个图像时,您需要添加该标志。

podman save -m -o images.tar \
  docker.io/photoprism/photoprism:latest \
  docker.io/library/mariadb:10.7

-m, --multi-image-archive
将附加参数解释为图像而不是标签并创建多图像存档(仅适用于 docker-archive)

更多信息:https://github.com/containers/podman/issues/2669

相关内容