无法在 Mac M1 Monterey 上运行 Podman

9

到目前为止,我已经完成了以下步骤:

  1. brew install qemu(显然需要用于podman,但我也希望将其用于虚拟机)
  2. brew install podman
  3. 修改~/.config/containers/containers.conf文件,在[engine]部分添加以下行:

helper_binaries_dir = ["/Users/user/dev/homebrew/Cellar/podman/4.1.0/bin","/Users/user/dev/homebrew/Cellar/podman/4.1.0/libexec"]

  1. podman machine init
  2. podman machine start

最初,machine start报错称无法拨打var/folders/v0/xqf571mj5sg5x7k4j1dpb1_w0000gn/T/podman/podman-machine-default_ready.sock的unix套接字。该文件存在,所以不知道问题出在哪里。

我重启了一下电脑,看看是否有所帮助,现在那个套接字文件已经不存在了,但podman machine start仍然想要使用它。重新运行podman machine init只会显示以下错误:

Error: podman-machine-default: VM already exists

这个错误总是在成功初始化后出现,因此似乎与我的问题无关。

这就是我从各种网页中读到的内容。希望有人能提供进一步的帮助 :)

我已经十多年没有用Mac了,所以真的不知道像podman这样的东西应该如何工作,除了它显然需要QEMU为每个容器运行一个虚拟机之外。

与其与podman斗争,我是否最好使用Docker Desktop for Mac呢?如果是这样,我就用那个。Podman在我的Linux桌面上非常简单,但也许在Mac上或至少在M1上并不值得麻烦。


看起来有很多人遇到了类似的问题(包括我自己),可能与最近的qemu 7.0.0变化有关。相关问题:https://github.com/containers/podman/issues/14303 - vtrubets
2个回答

4
经过一段时间的调试,我找到了这个问题的原因。
这个问题是由于在 Mac 机器启动后的每次第一次 qemu 执行时,qemu 7.0.0 的启动延迟(3-5秒)造成的。
Podman 存在一些错误,它没有预料到由 qemu 调用创建的 socks 文件的创建可能会延迟几秒钟,当 Podman 尝试访问 socks 文件时,qemu 还未创建它们,显示错误 "Error: dial unix /podman/podman-machine-default_ready.sock: connect: connection refused"。
为了避免这个问题,在调用 "podman machine start" 之前,只需执行 qemu 即可,即使使用无效选项(仅用于初始化)也可以。
经过一段时间的调试,我找到了这个问题的原因。
这个问题是由于在 Mac 机器启动后的每次第一次 qemu 执行时,qemu 7.0.0 的启动延迟(3-5秒)造成的。
Podman 存在一些错误,它没有预料到由 qemu 调用创建的 socks 文件的创建可能会延迟几秒钟,当 Podman 尝试访问 socks 文件时,qemu 还未创建它们,显示错误 "Error: dial unix /podman/podman-machine-default_ready.sock: connect: connection refused"。
为了避免这个问题,在调用 "podman machine start" 之前,只需执行 qemu 即可,即使使用无效选项(仅用于初始化)也可以。
            echo "* Podman VM machine for MACOSX is stoped, starting..."
            
            # workaround - initialize qemu before machine start to avoid socket error
            /usr/local/bin/qemu-system-x86_64 -machine q35,accel=hvf:tcg -cpu host -display none INVALID_OPTION >> /dev/null 2>&1

            podman machine start podman-machine-default
            ECODE=$?;if [ $ECODE -ne 0 ];then echo "* Error starting podman linux vm machine: $ECODE";exit $ECODE;fi

1
我昨天遇到了类似的问题,其他人也遇到了。解决方案来自于上面评论中链接的问题线程。问题是通过将homebrew默认提供的QEMU版本降级解决的。
你可以在Monterrey上降级到QEMU 6.2.0,具体方法如下:
curl -L -H "Authorization: Bearer QQ==" -o qemu-6.2.0_1.monterey.bottle.tar.gz https://ghcr.io/v2/homebrew/core/qemu/blobs/sha256:fcc3b1a8139f70dae57f5449f3856f9b3b67448ee0623e64da1e47dc255b46f6
brew install -f qemu-6.2.0_1.monterey.bottle.tar.gz

好的,我会关注那个线程,看起来很有前途。这个问题可能会得到解决。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接