在 Apple Silicon 上使用 podman 运行 amd64 UBI9 镜像

在 Apple Silicon 上使用 podman 运行 amd64 UBI9 镜像

我正在尝试使用 Podman 在 Apple 芯片上运行 amd64 UBI9 映像。Podman 提供了一个 Fedora CoreOS VM 来运行容器。它允许安装 qemu 二进制文件来运行“外部架构”容器。

问题是,UBI9 图像的架构是 x86_64-v2,而 Fedora CoreOS VM 中的 qemu-x86_64-static 二进制文件不支持该架构(目前还不支持?)。

这意味着运行该图像会导致错误:

➜ podman build -f Containerfile --platform linux/amd64 -t mycontainer:0.3 .
STEP 1/7: FROM registry.access.redhat.com/ubi9/ubi-minimal:latest
STEP 2/7: RUN microdnf install -y python3 python3-pip
Fatal glibc error: CPU does not support x86-64-v2
Error: error building at STEP "RUN microdnf install -y python3 python3-pip": error while running runtime: exit status 127

据我所知,在虚拟机中设置一个名为的环境变量QEMU_CPU可能max会解决这个问题,但我不确定如何以及在何处设置该变量以便被 podman 进程获取。

有人已经解决这个问题了吗?

(我想我可以把它放在 MacOS 网站、超级用户网站和 stackoverflow.com 上,但我认为它最适合这里,因为需要特定的知识。)

已解决:为了后代:我最终为此提交了一个错误,并且通过使在 MacOS 上用于运行容器的 Fedora CoreOS 映像对在 arm64 上模拟 x86_64 的 qemu 库使用不同的编译标志来修复了这个问题。

漏洞:https://github.com/containers/podman/issues/15456

答案1

您的命令,您指定“amd64”,它不起作用...您运行的是 ARM 处理器。并且 VM 知道这一点。您无法在 ARM 上运行 x86 映像。

或者你可以运行:

podman run -it --arch=arm64 registry.access.redhat.com/ubi9/ubi:9.0.0-1604 /bin/bash

老实说,我对此不太确定。我认为它确实可以“模拟”,但真的不确定。但我知道容器会启动……

PS:不要忘记,并非所有容器都是为 Apple Silicon(ARM)构建的,这也适用于软件包

答案2

我遇到了同样的问题,但我正在使用科利马。实际上 colima 和 podman 都使用量子计算单元引擎盖下的虚拟机管理程序。我做了一些挖掘,对于 colima 来说,这真的很简单,你只需要为 QEMU 指示不同的 cpu 类型:

colima start -cpu 4 -memory 8 --cpu-type max

那个“max”指示 QEMU 为模拟 CPU 提供与主机 CPU 相同的功能。而 Silicon 处理器支持 x86_64_v2。您可以尝试使用 docker-desktop,您将看到它正常工作。如果您可以更改为 colima,我建议您这样做,如果不能,请继续阅读 :)

因为您使用的是 podman,所以 podman 可能使用了与 colima 类似的默认值,这就是它不起作用的原因。我在官方文档中搜索,我认为他们没有提供这样的标志(https://docs.podman.io/en/latest/markdown/podman-machine-init.1.html)但我认为你可以调整 QEMU 配置文件,它应该位于这里的某个地方:

~/.config/containers/podman/machine/qemu

请看这里的例子:https://github.com/containers/podman/issues/10577#issuecomment-855400042

如果这个人有“cortex-a57”,那么你应该有“max”。

相关内容