在 Docker 容器中运行 OSX(macOS)

功能 ✨

  • 支持 KVM 加速
  • 基于 Web 的图形界面
  • 自动下载

使用方式 🐳

通过 Docker Compose 启动:
  1. services:
  2. macos:
  3. image: dockurr/macos
  4. container_name: macos
  5. environment:
  6. VERSION: "13"
  7. devices:
  8. - /dev/kvm
  9. - /dev/net/tun
  10. cap_add:
  11. - NET_ADMIN
  12. ports:
  13. - 8006:8006
  14. - 5900:5900/tcp
  15. - 5900:5900/udp
  16. volumes:
  17. - ./macos:/storage
  18. restart: always
  19. stop_grace_period: 2m
通过 Docker CLI 启动:
  1. docker run -it --rm --name macos -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/macos:/storage" --stop-timeout 120 dockurr/macos
通过 Kubernetes 启动:
  1. kubectl apply -f https://raw.githubusercontent.com/dockur/macos/refs/heads/master/kubernetes.yml
通过 Github Codespaces 启动:

Open in GitHub Codespaces

常见问题解答 💬

如何使用?

非常简单!按照以下步骤操作:

  • 启动容器并使用浏览器访问 端口 8006

  • 选择 Disk Utility,然后选择最大容量的 Apple Inc. VirtIO Block Media 磁盘

  • 点击 Erase 按钮将其格式化为 APFS,并命名为任意你喜欢的名称

  • 关闭当前窗口,点击 Reinstall macOS 继续安装流程

  • 系统提示你选择安装位置时,选刚才创建的磁盘

  • 文件复制完成后,选择你的地区、语言和账户设置

尽情享受你的新机器吧,别忘了给这个仓库点个 Star!

如何选择 macOS 的版本?

默认会安装 macOS 13(Ventura),你也可以通过设置 VERSION 环境变量来指定其它版本:

  1. environment:
  2. VERSION: "13"

可选的版本如下:

版本 名称
15 macOS 15 Sequoia
14 macOS 14 Sonoma
13 macOS 13 Ventura
12 macOS 12 Monterey
11 macOS 11 Big Sur

[!NOTE] 对 macOS 15(Sequoia)的支持还处于早期阶段,目前还不能登录 Apple 账户。

如何更改存储位置?

你可以在 compose 文件中设置如下绑定挂载:

  1. volumes:
  2. - ./macos:/storage

将示例路径 ./macos 替换为你希望使用的存储目录或命名卷。

如何修改磁盘大小?

默认磁盘大小为 64GB。你可以添加 DISK_SIZE 环境变量来设置容量:

  1. environment:
  2. DISK_SIZE: "256G"

[!TIP] 也可以用它来无损扩容已有磁盘。

如何修改 CPU 和内存配置?

默认允许容器使用最多 2 核 CPU 和 4GB 内存。你可以通过设置以下环境变量来调整:

  1. environment:
  2. RAM_SIZE: "8G"
  3. CPU_CORES: "4"

如何为容器分配独立 IP 地址?

默认容器使用 bridge 网络,会共享主机 IP。如果你希望分配独立 IP,可以创建 macvlan 网络:

  1. docker network create -d macvlan \
  2. --subnet=192.168.0.0/24 \
  3. --gateway=192.168.0.1 \
  4. --ip-range=192.168.0.100/28 \
  5. -o parent=eth0 vlan

请根据你的本地网络设置调整这些参数。然后修改 compose 文件如下:

  1. services:
  2. macos:
  3. container_name: macos
  4. ..<snip>..
  5. networks:
  6. vlan:
  7. ipv4_address: 192.168.0.100
  8. networks:
  9. vlan:
  10. external: true

这种方式的一个额外好处是无需再做端口映射,所有端口默认开放。

[!IMPORTANT] 由于 macvlan 的设计,该 IP 无法从 Docker 主机访问。如有需求,你可以设置 第二个 macvlan 网络 作为变通方法。

如何让 macOS 从路由器获取 IP?

配置完 macvlan 之后,macOS 可以像其他设备一样从你的路由器获取 IP,加入家庭网络。

在 compose 文件中添加以下配置启用该模式:

  1. environment:
  2. DHCP: "Y"
  3. devices:
  4. - /dev/vhost-net
  5. device_cgroup_rules:
  6. - 'c *:* rwm'

如何挂载真实磁盘?

可以通过以下方式将磁盘设备或分区挂载到容器中:

  1. devices:
  2. - /dev/sdb:/disk1
  3. - /dev/sdc1:/disk2

如果你希望该磁盘作为主系统盘,请使用 /disk1;其它的可以作为次要磁盘。

如何挂载 USB 设备?

首先使用 lsusb 命令查找 USB 设备的 vendor 和 product ID,然后在 compose 文件中添加:

  1. environment:
  2. ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
  3. devices:
  4. - /dev/bus/usb

如何与主机共享文件?

在 compose 文件中添加如下卷配置:

  1. volumes:
  2. - ./example:/shared

启动 macOS 后,在终端执行以下命令:

  1. sudo -S mount_9p shared

在 Finder 菜单栏点击 “前往 - 电脑” 即可访问共享文件夹,内容与 ./example 相同。

如何检查系统是否支持 KVM?

先通过下表确认你的软件是否支持:

产品 Linux Win11 Win10 macOS
Docker CLI
Docker Desktop
Podman CLI
Podman Desktop

然后在 Linux 下运行以下命令:

  1. sudo apt install cpu-checker
  2. sudo kvm-ok

如果 kvm-ok 报错,说明系统无法使用 KVM,请检查:

  • 是否在 BIOS 中启用了虚拟化扩展(如 Intel VT-x 或 AMD SVM)

  • 如果容器运行在虚拟机中,是否启用了嵌套虚拟化(nested virtualization)

  • 你是否运行在 VPS 上,大多数云主机都不支持嵌套虚拟化

如果没有报错但容器提示找不到 KVM 设备,可以尝试在 compose 文件中添加 privileged: true,或者在运行命令前加上 sudo,排除权限问题。

如何在容器中运行 Windows?

你可以使用 dockur/windows,它具有类似功能,并支持自动安装。

如何在容器中运行 Linux 桌面?

你可以使用 qemus/qemu