菜单

Auto 镜像

相关源文件

Docker-OSX 的 Auto Image 变体提供了一个预装 macOS 环境,并具备自动化功能。此镜像已预装 macOS,配置了 SSH,并支持自动登录,非常适合 CI/CD 流水线、无头操作和自动化测试环境。要自定义您自己的磁盘映像,请参阅 Naked Image,对于自定义磁盘和自动化相结合的方案,请参阅 Naked-Auto Image

主要特性和功能

  • 预装 macOS(默认 Catalina)
  • 自动 SSH 密钥生成和设置
  • 默认凭据(用户名:user,密码:alpine
  • 支持通过 Xvfb 进行无头操作
  • 通过 OSX_COMMANDS 环境变量进行命令自动化
  • 支持自定义序列号生成
  • 可配置显示分辨率

Auto Image 架构

来源:Dockerfile.auto43-45 Dockerfile.auto127-141 Dockerfile.auto262-284

使用示例

基本用法

运行 Auto Image 并显示图形界面

CI/CD 环境的无头使用

适用于没有显示器的 CI/CD 流水线或服务器环境

运行自动化命令

启动后在 macOS 中自动执行命令

来源:README.md692-701 Dockerfile.auto282-284

启动过程

Auto Image 容器遵循特定的启动顺序以提供其自动化功能

来源:Dockerfile.auto262-284

配置选项

Auto Image 变体通过环境变量提供了广泛的配置选项

系统资源

环境变量默认描述
内存3分配给虚拟机的 RAM(GB)(也可以是 maxhalf
CPUPenryn要模拟的 CPU 类型
KVMaccel=kvm:tcgKVM 加速选项
网络vmxnet3网络适配器类型

显示设置

环境变量默认描述
HEADLESSfalse使用 Xvfb 无头运行
DISPLAY:99使用的 X11 显示
WIDTH1920屏幕宽度(需要 GENERATE_UNIQUE=trueGENERATE_SPECIFIC=true
HEIGHT1080屏幕高度(需要 GENERATE_UNIQUE=trueGENERATE_SPECIFIC=true

身份验证

环境变量默认描述
USERNAMEusermacOS SSH 登录用户名
PASSWORDalpinemacOS SSH 登录密码

序列号生成

环境变量默认描述
GENERATE_UNIQUEfalse生成随机序列号
GENERATE_SPECIFICfalse使用特定序列号
DEVICE_MODEL-设备型号标识符(例如:iMacPro1,1
SERIAL-设备序列号
BOARD_SERIAL-主板序列号
UUID-系统 UUID
MAC_ADDRESS-网络适配器 MAC 地址

来源:Dockerfile.auto151-204 Dockerfile.auto232-255

序列号生成流程

Auto Image 可以为您的 macOS 虚拟机生成唯一的序列号,这对于 iMessage/iCloud 激活特别有用

来源:Dockerfile.auto232-255 README.md1282-1296 README.md1297-1325

用例

Auto Image 变体特别适合

  1. CI/CD 流水线:无需手动干预即可对 iOS/macOS 应用程序进行自动化测试
  2. 无头服务器:在没有显示器的服务器上运行 macOS 特定工作负载
  3. 开发环境:通过预配置设置快速设置 macOS 开发环境
  4. 安全研究:使用自定义序列号对 macOS 安全功能进行自动化测试
  5. 可重复环境:创建具有相同配置的相同 macOS 实例

技术实现细节

存储架构

Auto Image 使用一个预制的 QCOW2 磁盘映像(约 20GB),其中包含

  • 一个完全安装的 macOS 系统(默认 Catalina)
  • 一个具有已知凭据的预配置用户账户
  • 已启用并配置的 SSH 服务
  • 具有适当配置的 OpenCore 引导加载程序

该映像由 QEMU 加载,可通过 X11 转发或 SSH 访问。

SSH 设置过程

容器会自动

  1. 在不存在 SSH 密钥对的情况下生成新的密钥对
  2. 启动 macOS 虚拟机
  3. 等待 macOS 中的 SSH 服务可用
  4. 将公钥复制到 macOS 的 authorized_keys 中
  5. 配置容器中的 SSH 客户端以实现无密码登录
  6. 执行 OSX_COMMANDS 中指定的任何命令,或打开交互式会话

来源:Dockerfile.auto262-284

故障排除

常见问题

  1. SSH 连接失败:

    • 确保您的 Docker 运行命令中正确转发了端口 50922
    • 验证容器是否已完全启动(可能需要 2-3 分钟)
    • 检查默认凭据是否未被更改
  2. 无头模式下的显示问题:

    • 无头模式使用显示器 :99 上的 Xvfb
    • 尝试显式运行 -e DISPLAY=:99
    • 确保您的主机系统已安装 X11 实用程序
  3. 性能问题:

    • 使用 -e RAM=4 或更高版本增加 RAM 分配
    • 确保 KVM 加速已启用(需要 /dev/kvm)
    • 考虑使用 -e CPU=Haswell 或其他型号调整 CPU 设置
  4. 序列号生成失败:

    • 当使用 -e GENERATE_SPECIFIC=true 时,请确保提供了所有必需的参数
    • 检查序列号或 MAC 地址的语法错误

来源:README.md697-850

结论

Docker-OSX 的 Auto Image 变体提供了一种简化的方式来在容器中运行 macOS,并具备自动化能力。其预装性质和 SSH 配置使其成为 CI/CD 环境、无头服务器和自动化测试场景的理想选择。通过利用各种配置选项,您可以自定义环境以满足您的特定需求,同时保留容器化的优势。