常见问题
通用问题
“Lima 是如何工作的?”
- 虚拟机管理程序:QEMU(Linux 上默认),或 Virtualization.framework(macOS 上默认)
- 文件系统共享:反向 SSHFS、virtio-9p-pci(即 virtfs,QEMU 默认),或 virtiofs(Virtualization.framework 默认)
- 端口转发:
ssh -L,通过监视客户机中的/proc/net/tcp和iptables事件自动化
Try virtiofs. See Usage » SSH
密码默认被禁用和锁定。
你必须使用 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
- 以下二进制文件需要预安装,或可通过包管理器安装:
sshfsnewuidmap和newgidmap
apt-get、dnf、apk、pacman或zypper(如果你想为另一个包管理器贡献支持,运行git grep apt-get来找出需要修改的地方)
“我可以运行 Docker 和 Podman 等其他容器引擎吗?Kubernetes 呢?”
是的,任何容器引擎都应该可以与 Lima 一起工作。
容器运行时模板:
./templates/docker.yaml:Docker./templates/podman.yaml:Podman./templates/apptainer.yaml:Apptainer
容器镜像构建器模板:
./templates/buildkit.yaml:BuildKit
容器编排器模板:
./templates/k3s.yaml:Kubernetes (k3s)./templates/k8s.yaml:Kubernetes (kubeadm)
默认的 Ubuntu 镜像也包含 LXD。运行 lima sudo lxc init 来设置 LXD。
另请参阅基于 Lima 的第三方 containerd 项目:
- Rancher Desktop:将 Kubernetes 和容器管理带到桌面
- Colima:在 macOS 上使用最少设置运行 Docker(和 Kubernetes)
或与 Lima 兼容的第三方"containers"项目:
- Podman Desktop:面向应用程序开发者的容器和 Kubernetes
“我可以在远程 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 很慢”
- Make sure that HVF is enabled with
com.apple.security.hypervisorentitlement. See "QEMU crashes withHV_ERROR". - Emulating non-native machines is slow by design. See
Configuration guide » Intel-on-ARM and ARM-on-Intelfor a workaround.
错误 “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 开始)。
See Configuration guide » Network.
“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
文件系统共享问题
“文件系统很慢”
Try virtiofs. See Configuration guide » Filesystem mounts
“文件系统不可写”
主目录默认以只读方式挂载。
要启用写入,在 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 中没有混合使用制表符和空格。