在 Docker 容器中运行 OSX(macOS)
功能 ✨
- 支持 KVM 加速
- 基于 Web 的图形界面
- 自动下载
使用方式 🐳
通过 Docker Compose 启动:
services:
macos:
image: dockurr/macos
container_name: macos
environment:
VERSION: "13"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 5900:5900/tcp
- 5900:5900/udp
volumes:
- ./macos:/storage
restart: always
stop_grace_period: 2m
通过 Docker CLI 启动:
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 启动:
kubectl apply -f https://raw.githubusercontent.com/dockur/macos/refs/heads/master/kubernetes.yml
通过 Github Codespaces 启动:
常见问题解答 💬
如何使用?
非常简单!按照以下步骤操作:
启动容器并使用浏览器访问 端口 8006
选择
Disk Utility
,然后选择最大容量的Apple Inc. VirtIO Block Media
磁盘点击
Erase
按钮将其格式化为 APFS,并命名为任意你喜欢的名称关闭当前窗口,点击
Reinstall macOS
继续安装流程系统提示你选择安装位置时,选刚才创建的磁盘
文件复制完成后,选择你的地区、语言和账户设置
尽情享受你的新机器吧,别忘了给这个仓库点个 Star!
如何选择 macOS 的版本?
默认会安装 macOS 13(Ventura),你也可以通过设置 VERSION
环境变量来指定其它版本:
environment:
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 文件中设置如下绑定挂载:
volumes:
- ./macos:/storage
将示例路径 ./macos
替换为你希望使用的存储目录或命名卷。
如何修改磁盘大小?
默认磁盘大小为 64GB。你可以添加 DISK_SIZE
环境变量来设置容量:
environment:
DISK_SIZE: "256G"
[!TIP] 也可以用它来无损扩容已有磁盘。
如何修改 CPU 和内存配置?
默认允许容器使用最多 2 核 CPU 和 4GB 内存。你可以通过设置以下环境变量来调整:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
如何为容器分配独立 IP 地址?
默认容器使用 bridge 网络,会共享主机 IP。如果你希望分配独立 IP,可以创建 macvlan 网络:
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.100/28 \
-o parent=eth0 vlan
请根据你的本地网络设置调整这些参数。然后修改 compose 文件如下:
services:
macos:
container_name: macos
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
这种方式的一个额外好处是无需再做端口映射,所有端口默认开放。
[!IMPORTANT] 由于 macvlan 的设计,该 IP 无法从 Docker 主机访问。如有需求,你可以设置 第二个 macvlan 网络 作为变通方法。
如何让 macOS 从路由器获取 IP?
配置完 macvlan 之后,macOS 可以像其他设备一样从你的路由器获取 IP,加入家庭网络。
在 compose 文件中添加以下配置启用该模式:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
如何挂载真实磁盘?
可以通过以下方式将磁盘设备或分区挂载到容器中:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
如果你希望该磁盘作为主系统盘,请使用 /disk1
;其它的可以作为次要磁盘。
如何挂载 USB 设备?
首先使用 lsusb
命令查找 USB 设备的 vendor 和 product ID,然后在 compose 文件中添加:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
如何与主机共享文件?
在 compose 文件中添加如下卷配置:
volumes:
- ./example:/shared
启动 macOS 后,在终端执行以下命令:
sudo -S mount_9p shared
在 Finder 菜单栏点击 “前往 - 电脑” 即可访问共享文件夹,内容与 ./example
相同。
如何检查系统是否支持 KVM?
先通过下表确认你的软件是否支持:
产品 | Linux | Win11 | Win10 | macOS |
---|---|---|---|---|
Docker CLI | ✅ | ✅ | ❌ | ❌ |
Docker Desktop | ❌ | ✅ | ❌ | ❌ |
Podman CLI | ✅ | ✅ | ❌ | ❌ |
Podman Desktop | ✅ | ✅ | ❌ | ❌ |
然后在 Linux 下运行以下命令:
sudo apt install cpu-checker
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。