常见问题
通用问题
“Lima 是如何工作的?”
- 虚拟机管理程序:QEMU(Linux 上默认),或 Virtualization.framework(macOS 上默认)
- 文件系统共享:反向 SSHFS、virtio-9p-pci(即 virtfs,QEMU 默认),或 virtiofs(Virtualization.framework 默认)
- 端口转发:
ssh -L
,通过监视客户机中的/proc/net/tcp
和iptables
事件自动化
“我的登录密码是什么?”
密码默认被禁用和锁定。
你必须使用 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
newuidmap
和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 很慢”
- 确保使用
com.apple.security.hypervisor
授权启用了 HVF。参见 QEMU 崩溃并显示HV_ERROR
。 - 模拟非原生机器(ARM 上的 Intel、Intel 上的 ARM)设计上就很慢。参见
docs/multi-arch.md
获取解决方法。
错误 “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 中没有混合使用制表符和空格。