常见问题

通用问题

“Lima 是如何工作的?”

“我的登录密码是什么?”

密码默认被禁用和锁定。 你必须使用 limactl shell bash(或 lima bash)来打开一个 shell。

或者,你也可以直接 ssh 到客户机:ssh -p 60022 -i ~/.lima/_config/user -o NoHostAuthenticationForLocalhost=yes 127.0.0.1

“Lima 可以在 ARM Mac 上运行吗?”

是的

“我可以运行非 Ubuntu 客户机吗?”

AlmaLinux、Alpine、Arch Linux、Debian、Fedora、openSUSE、Oracle Linux 和 Rocky 也已知可以工作。

参见 ./templates/

镜像必须满足以下要求:

  • systemd 或 OpenRC
  • cloud-init
  • 以下二进制文件需要预安装:
    • sudo
  • 以下二进制文件需要预安装,或可通过包管理器安装:
    • sshfs
    • newuidmapnewgidmap
  • apt-getdnfapkpacmanzypper(如果你想为另一个包管理器贡献支持,运行 git grep apt-get 来找出需要修改的地方)

“我可以运行 Docker 和 Podman 等其他容器引擎吗?Kubernetes 呢?”

是的,任何容器引擎都应该可以与 Lima 一起工作。

容器运行时模板:

容器镜像构建器模板:

容器编排器模板:

默认的 Ubuntu 镜像也包含 LXD。运行 lima sudo lxc init 来设置 LXD。

另请参阅基于 Lima 的第三方 containerd 项目:

  • Rancher Desktop:将 Kubernetes 和容器管理带到桌面
  • Colima:在 macOS 上使用最少设置运行 Docker(和 Kubernetes)

或与 Lima 兼容的第三方"containers"项目:

“我可以在远程 Linux 机器上运行 Lima 吗?”

Lima 本身不支持连接到远程 Linux 机器,但 sshocker(Lima 的前身)为远程 Linux 机器提供了类似的功能。

例如,运行 sshocker -v /Users/foo:/home/foo/mnt -p 8080:80 <USER>@<HOST> 来将 /Users/foo 暴露给远程机器作为 /home/foo/mnt,并将 localhost:8080 转发到远程机器的端口 80。

“与 Docker for Mac 相比有什么优势?”

Lima 是自由软件(Apache License 2.0),而 Docker for Mac 不是。

配置问题

是否可以禁用挂载、端口转发、containerd 等?

是的,从 Lima v0.18 开始:

limactl start --plain
plain: true

当启用"plain"模式时:

  • 挂载、端口转发、containerd 等的 YAML 属性将被忽略
  • 客户机代理将不会运行
  • 像 sshfs 这样的依赖包不会安装到虚拟机中

用户指定的配置脚本仍将执行。

QEMU 问题

“QEMU 崩溃并显示 HV_ERROR

如果你通过 homebrew 在 macOS 11 上安装了 QEMU v6.0.0 或更高版本,你的 QEMU 二进制文件应该已经自动签名以启用 HVF 加速。

但是,如果你看到 HV_ERROR,你可能需要手动签名二进制文件。

cat >entitlements.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.hypervisor</key>
    <true/>
</dict>
</plist>
EOF

codesign -s - --entitlements entitlements.xml --force /usr/local/bin/qemu-system-x86_64

注意:只有 在 macOS 版本 10.15.7 之前 你可能需要额外添加这个授权:

    <key>com.apple.vm.hypervisor</key>
    <true/>

“QEMU 很慢”

错误 “killed -9”

  • 确保 qemu 已签名,参见 QEMU 崩溃并显示 HV_ERROR
  • 如果你使用的是 macOS 10.15.7 或 11.0 或更高版本,确保 没有 添加授权 com.apple.vm.hypervisor。它只在较旧的 macOS 版本上工作。你可以使用 codesign --remove-signature /usr/local/bin/qemu-system-x86_64 清除代码签名并 重新开始

“QEMU 崩溃并显示 vmx_write_mem: mmu_gva_to_gpa XXXXXXXXXXXXXXXX failed

已知在 Intel Mac 上运行 RHEL8 兼容发行版(如 Rocky Linux 8.x)的镜像时会发生此错误。 解决方法是设置环境变量 QEMU_SYSTEM_X86_64="qemu-system-x86_64 -cpu Haswell-v4"

https://bugs.launchpad.net/qemu/+bug/1838390

VZ 问题

“Lima 卡在 Installing rosetta...

从终端尝试 softwareupdate --install-rosetta

网络问题

“无法从主机访问客户机 IP 192.168.5.15”

默认的客户机 IP 192.168.5.15 无法从主机和其他客户机访问。

要添加另一个可从主机和其他虚拟机访问的 IP 地址,启用 socket_vmnet(从 Lima v0.12 开始)。

参见 docs/network.md

“Ping 显示重复数据包和大量响应时间”

Lima 使用 QEMU 的 SLIRP 网络,它不直接支持 ping

$ ping google.com
PING google.com (172.217.165.14): 56 data bytes
64 bytes from 172.217.165.14: seq=0 ttl=42 time=2395159.646 ms
64 bytes from 172.217.165.14: seq=0 ttl=42 time=2396160.798 ms (DUP!)

更多详情,参见 Documentation/Networking

“vmnet 网络未分配 IP 地址”

尝试以下命令:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd

文件系统共享问题

“文件系统很慢”

尝试 virtiofs。参见 docs/mount.md

“文件系统不可写”

主目录默认以只读方式挂载。 要启用写入,在 YAML 中指定 writable: true

mounts:
- location: "~"
  writable: true

运行 limactl edit <INSTANCE> 为现有实例打开 YAML 编辑器。

“升级 Lima 到 v1.0 后文件系统未挂载”

Lima v1.0 将 QEMU 的默认挂载类型从 reverse-sshfs 更改为 9p

已知 9p 挂载类型与以下客户机操作系统不兼容:

  • AlmaLinux、CentOS Stream、Oracle Linux 和 RockyLinux
  • Debian GNU/Linux
  • openSUSE

这些操作系统的新实例仍默认使用 reverse-sshfs。 但是,使用 Lima 早期版本创建的现有实例可能需要运行以下命令(通常不需要):

limactl edit --mount-type=reverse-sshfs <n>

Ubuntu 用户不受此问题影响。

外部项目问题

“我在使用 Rancher Desktop。如何处理底层的 Lima?”

Rancher Desktop 包含 rdctl 工具(安装在 ~/.rd/bin/rdctl),通过 rdctl shell 提供 shell 访问。

不建议通过 limactl 直接与 Rancher Desktop VM 交互。

如果你需要创建 override.yaml 文件,其位置应该是:

  • macOS:$HOME/Library/Application Support/rancher-desktop/lima/_config/override.yaml
  • Linux:$HOME/.local/share/rancher-desktop/lima/_config/override.yaml

其他调试的提示?

  • 检查日志:
    • limactl --debug start
    • $HOME/.lima/<INSTANCE>/serial.log
    • /var/log/cloud-init-output.log(客户机内部)
    • /var/log/cloud-init.log(客户机内部)
  • 确保在 YAML 中没有混合使用制表符和空格。