Lima 使用文档

Lima 使用文档

Lima(Linux Machines)是在 macOS、Linux 等宿主机上创建 Linux 虚拟机的轻量工具。它常用来在 Mac 上获得接近原生 Linux 的开发环境,并内置文件共享、端口转发、containerd/nerdctl 等能力。

适合场景:

Note

官方文档在 2026 年的示例中使用 template:dockertemplate:ubuntu-lts 这种模板 URL 写法。旧资料里常见的 template://docker 不再作为首选写法。

安装

macOS 推荐用 Homebrew:

brew install lima

其他安装方式:

# MacPorts
sudo port install lima

# Nix
nix-env -i lima

如果使用 QEMU 作为虚拟化驱动,需要系统中有 QEMU;在 macOS 上 Lima 也可以使用 Apple 的 Virtualization.framework(配置中通常写作 vz)。

安装后检查:

limactl --version
limactl --help

最快创建一个虚拟机

创建并启动默认实例:

limactl start

第一次执行时,Lima 会弹出交互式选择。一般选择:

Proceed with the current configuration

看到 READY 后,进入默认虚拟机:

lima

在默认虚拟机里执行一条命令:

lima uname -a
lima cat /etc/os-release

退出虚拟机 shell:

exit

非交互创建适合脚本:

limactl start --tty=false

# 或者使用 -y,含义相同
limactl start -y

创建具名虚拟机

日常更推荐给虚拟机取名字,方便同时管理多台实例。

# 使用默认模板创建 dev
limactl start --name dev template:default

# 使用 Ubuntu LTS 模板创建 ubuntu
limactl start --name ubuntu template:ubuntu-lts

# 创建 Debian
limactl start --name debian template:debian

进入具名实例:

limactl shell dev

在具名实例里执行命令:

limactl shell dev uname -a
limactl shell dev -- sudo apt update

也可以让 lima 快捷命令临时指向某个实例:

LIMA_INSTANCE=dev lima uname -a

生命周期管理

# 查看实例
limactl list

# 启动已经存在的实例
limactl start dev

# 停止实例
limactl stop dev

# 重启实例
limactl restart dev

# 删除实例,删除前最好确认没有重要数据只放在虚拟机磁盘里
limactl delete dev

# 非交互删除
limactl delete dev -f

查看实例目录:

limactl list dev --format '{{.Dir}}'

实例通常位于:

~/.lima/<实例名>/

按资源规格创建虚拟机

创建时指定 CPU、内存、磁盘:

limactl start --name dev \
  --cpus 4 \
  --memory 8 \
  --disk 80 \
  template:ubuntu-lts

说明:

停机后编辑实例配置:

limactl stop dev
limactl edit dev
limactl start dev

使用模板

列出内置模板:

limactl start --list-templates

常用模板:

limactl start --name ubuntu template:ubuntu-lts
limactl start --name debian template:debian
limactl start --name fedora template:fedora
limactl start --name arch template:archlinux
limactl start --name docker template:docker
limactl start --name podman template:podman
limactl start --name k3s template:k3s
limactl start --name k8s template:k8s

如果想把创建和启动拆开:

limactl create --name dev template:ubuntu-lts
limactl start dev

自定义 YAML 创建虚拟机

创建 dev.yaml

minimumLimaVersion: "2.0.0"

base:
  - template:ubuntu-lts

cpus: 4
memory: "8GiB"
disk: "80GiB"

mountType: "virtiofs"
mounts:
  - location: "~"
    writable: false
  - location: "~/projects"
    mountPoint: "/workspace"
    writable: true

portForwards:
  - guestPort: 8080
    hostPort: 8080
  - guestPort: 3000
    hostPort: 3000

provision:
  - mode: system
    script: |
      #!/bin/bash
      set -euxo pipefail
      apt-get update
      apt-get install -y git curl build-essential

用 YAML 创建并启动:

limactl start --name dev ./dev.yaml

进入验证:

limactl shell dev
ls /workspace

文件共享

默认模板会把宿主机 home 目录以只读方式挂载进虚拟机。macOS 宿主机里路径通常保持为:

/Users/<你的用户名>

虚拟机自己的 home 目录是独立的。Lima 2.1 之后,Linux guest 通常使用:

/home/<你的用户名>.guest

临时让默认挂载可写:

limactl start --name dev --mount-writable template:default

创建时指定挂载:

limactl start --name dev \
  --mount ~/projects:w \
  template:ubuntu-lts

YAML 中指定挂载:

mounts:
  - location: "~/projects"
    mountPoint: "/workspace"
    writable: true

常见挂载类型:

类型 适用场景
9p QEMU 的默认挂载类型,适合通用场景
virtiofs VZ 下常用,macOS 13+ 支持,性能通常更好
reverse-sshfs 兼容性好,适合遇到 9p/virtiofs 问题时回退

创建时指定挂载类型:

limactl start --name dev --vm-type=vz --mount-type=virtiofs template:ubuntu-lts
limactl start --name dev-qemu --vm-type=qemu --mount-type=9p template:ubuntu-lts

复制文件

不想配置共享目录时,可以直接复制文件:

# 宿主机 -> 虚拟机
limactl copy ./local-file.txt dev:/tmp/

# 虚拟机 -> 宿主机
limactl copy dev:/tmp/result.txt ./

端口转发

Lima 支持把虚拟机内监听的 localhost 端口转发到宿主机。

例如在虚拟机里启动服务:

limactl shell dev -- python3 -m http.server 8080

宿主机访问:

curl http://127.0.0.1:8080

创建时通过命令行指定端口:

limactl start --name web --port-forward 8080:80 template:ubuntu-lts

YAML 中指定端口:

portForwards:
  - guestPort: 80
    hostPort: 8080
  - guestPort: 3000
    hostPort: 3000

忽略某个端口:

portForwards:
  - guestPort: 22
    ignore: true

如果要通过虚拟机 IP 访问,而不是只通过 localhost,可以给实例连接 vzNATlima:shared 网络:

limactl start --name dev --network vzNAT template:ubuntu-lts
limactl shell dev -- ip addr show lima0

虚拟化驱动

常用驱动:

驱动 平台 说明
qemu macOS/Linux 通用,支持跨架构模拟
vz macOS 13+ Apple Virtualization.framework,性能通常更好
wsl2 Windows 实验性

创建 VZ 实例:

limactl start --name dev --vm-type=vz template:ubuntu-lts

在 Apple Silicon Mac 上启用 Rosetta:

limactl start --name dev \
  --vm-type=vz \
  --rosetta \
  template:ubuntu-lts

对应 YAML:

vmType: "vz"
rosetta:
  enabled: true
  binfmt: true

使用 containerd 和 nerdctl

Lima 默认集成 containerd,可用 nerdctl 运行容器。用法和 Docker CLI 很像。

# 在默认实例里运行 nginx
lima nerdctl run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine

# 查看容器
lima nerdctl ps

# 停止并删除
lima nerdctl rm -f nginx

具名实例:

limactl shell dev -- nerdctl ps

创建时禁用 containerd:

limactl start --name plain --containerd=none template:ubuntu-lts

使用 rootful containerd:

limactl start --name ctr --containerd=system template:ubuntu-lts
limactl shell ctr -- sudo nerdctl ps

使用 Docker

如果要使用 Docker Engine,可以直接使用 Docker 模板。

Rootless Docker:

limactl start template:docker
export DOCKER_HOST="$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')"
docker run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
docker ps

Rootful Docker:

limactl start template:docker-rootful
export DOCKER_HOST="$(limactl list docker-rootful --format 'unix://{{.Dir}}/sock/docker.sock')"
docker run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
docker ps

也可以把 DOCKER_HOST 写入 shell 配置:

echo 'export DOCKER_HOST="$(limactl list docker --format '\''unix://{{.Dir}}/sock/docker.sock'\'')"' >> ~/.zshrc

SSH 连接

查看 SSH 命令:

limactl show-ssh dev

直接 SSH:

ssh -F ~/.lima/dev/ssh.config lima-dev

在脚本中更推荐用:

limactl shell dev -- command args

快照

快照适合在大改系统前留回滚点。

limactl snapshot create dev --tag before-upgrade
limactl snapshot list dev
limactl snapshot apply dev --tag before-upgrade
limactl snapshot delete dev --tag before-upgrade

全局默认配置

可以在以下位置放全局默认配置:

~/.lima/_config/default.yaml

例如让新实例默认使用 VZ 和 virtiofs:

vmType: "vz"
mountType: "virtiofs"

还有一个覆盖配置:

~/.lima/_config/override.yaml

override.yaml 会覆盖具体实例的配置,适合强制应用某些全局策略。谨慎使用。

常见问题

端口访问不到

检查服务是否在虚拟机内监听:

limactl shell dev -- ss -ltnp

如果服务只监听虚拟机内某个非 localhost 地址,先改成监听 0.0.0.0127.0.0.1 再测试。

共享目录不可写

默认 home 挂载通常是只读的。创建实例时用:

limactl start --name dev --mount ~/projects:w template:ubuntu-lts

或在 YAML 里设置:

mounts:
  - location: "~/projects"
    writable: true

改了 YAML 但没生效

部分配置是创建期配置,不能对已存在实例直接变更。稳妥做法:

limactl stop dev
limactl edit dev
limactl start dev

如果仍无效,可能需要删除重建:

limactl delete dev
limactl start --name dev ./dev.yaml

磁盘空间不够

查看磁盘:

limactl disk list

调整磁盘需参考当前版本的 limactl disk resize 帮助:

limactl disk resize --help

推荐日常流程

# 1. 创建开发 VM
limactl start --name dev --cpus 4 --memory 8 --disk 80 template:ubuntu-lts

# 2. 进入 VM
limactl shell dev

# 3. 在 VM 中安装依赖
sudo apt update
sudo apt install -y git curl build-essential

# 4. 宿主机执行 VM 命令
limactl shell dev -- uname -a

# 5. 停止 VM
limactl stop dev

# 6. 再次启动
limactl start dev

参考链接