name: orbstack-best-practices description: 适用于 macOS 上 OrbStack Linux 虚拟机和 Docker 的最佳实践模式。涵盖 orbctl/orb 命令、虚拟机生命周期、cloud-init、网络、文件共享和 SSH 访问。在使用 OrbStack、orbctl 命令或在 macOS 上使用 Linux 虚拟机时必须参考。
OrbStack 最佳实践
OrbStack 是一个快速、轻量的 Docker 和 Linux 虚拟机运行时环境,适用于 macOS。它替代了 Docker Desktop,提供更好的性能和与 macOS 的无缝集成。
核心命令
# 启动/停止
orb # 启动并打开默认虚拟机 shell
orb start # 启动 OrbStack
orb stop # 停止 OrbStack
# 虚拟机管理
orb list # 列出所有虚拟机
orb create ubuntu # 使用最新版本创建
orb create ubuntu:jammy myvm # 指定版本和名称
orb create --arch amd64 ubuntu intel # 在 Apple Silicon 上创建 x86 架构虚拟机
orb delete myvm # 删除虚拟机
# Shell 访问
orb # 进入默认虚拟机 shell
orb -m myvm # 进入指定虚拟机
orb -u root # 以 root 用户身份进入
orb -m myvm -u root # 组合使用
# 运行命令
orb uname -a # 在默认虚拟机中运行命令
orb -m myvm ./script.sh # 在指定虚拟机中运行脚本
# 文件传输
orb push ~/local.txt # 复制文件到 Linux
orb pull ~/remote.txt # 从 Linux 复制文件
orb push -m vm ~/f.txt /dest/ # 推送到指定虚拟机和路径
# Docker/K8s
orb restart docker # 重启 Docker 引擎
orb logs docker # 查看 Docker 引擎日志
orb start k8s # 启动 Kubernetes
orb delete k8s # 删除 K8s 集群
# 配置
orb config set memory_mib 8192 # 设置内存限制
orb config docker # 编辑 daemon.json
关键路径
| 路径 | 描述 |
|---|---|
~/OrbStack/<machine>/ |
从 macOS 访问 Linux 文件 |
~/OrbStack/docker/volumes/ |
从 macOS 访问 Docker 卷 |
/mnt/mac/Users/... |
从 Linux 访问 macOS 文件 |
/mnt/machines/<name>/ |
从 Linux 访问其他虚拟机文件 |
~/.orbstack/ssh/id_ed25519 |
SSH 私钥 |
~/.orbstack/config/docker.json |
Docker 守护进程配置 |
DNS 名称
| 模式 | 描述 |
|---|---|
<machine>.orb.local |
Linux 虚拟机 |
<container>.orb.local |
Docker 容器 |
<svc>.<project>.orb.local |
Compose 服务 |
host.orb.internal |
从 Linux 虚拟机访问 macOS |
host.docker.internal |
从容器访问 macOS |
docker.orb.internal |
从 Linux 虚拟机访问 Docker |
虚拟机生命周期
创建
orb create ubuntu # 最新版 Ubuntu
orb create ubuntu:noble devbox # Ubuntu 24.04,命名为 "devbox"
orb create --arch amd64 debian x86vm # 通过 Rosetta 进行 x86 模拟
orb create --set-password ubuntu pwvm # 设置密码
orb create ubuntu myvm -c cloud.yml # 使用 cloud-init
支持的发行版:Alma、Alpine、Arch、CentOS、Debian、Devuan、Fedora、Gentoo、Kali、NixOS、openSUSE、Oracle、Rocky、Ubuntu、Void
生命周期
orb start myvm # 启动已停止的虚拟机
orb stop myvm # 停止虚拟机
orb restart myvm # 重启
orb delete myvm # 永久删除
orb default myvm # 设置为默认虚拟机
orb logs myvm # 查看启动日志
Cloud-Init
使用自动化配置创建虚拟机:
orb create ubuntu myvm -c user-data.yml
示例 user-data.yml:
#cloud-config
packages:
- git
- vim
- docker.io
users:
- name: dev
groups: sudo, docker
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
runcmd:
- systemctl enable docker
- systemctl start docker
调试 cloud-init:
orb logs myvm # 从 macOS 查看启动日志
orb -m myvm cloud-init status --long # 在虚拟机内查看状态
orb -m myvm cat /var/log/cloud-init-output.log
网络
端口访问
Linux 虚拟机中的服务器自动映射到 localhost:
# 在 Linux 中:python3 -m http.server 8000
# 从 macOS:curl localhost:8000 或 curl myvm.orb.local:8000
从 Linux 连接到 macOS
# 从 Linux 虚拟机
curl host.orb.internal:3000
# 从 Docker 容器
curl host.docker.internal:3000
VPN/代理
- 完全兼容 VPN,自动处理 DNS
- 自动遵循 macOS 代理设置
- 自定义代理:
orb config set network_proxy http://proxy:8080 - 禁用:
orb config set network_proxy none
文件共享
从 Linux 访问 macOS 文件
# 路径相同
cat /Users/allen/file.txt
cat /mnt/mac/Users/allen/file.txt # 显式前缀
从 macOS 访问 Linux 文件
ls ~/OrbStack/myvm/home/user/
ls ~/OrbStack/docker/volumes/myvolume/
传输命令
orb push ~/local.txt # 到默认虚拟机主目录
orb pull ~/remote.txt # 从默认虚拟机
orb push -m vm ~/f.txt /tmp/ # 到指定路径
SSH 访问
内置多路复用 SSH 服务器(无需为每个虚拟机单独设置):
ssh orb # 默认虚拟机
ssh myvm@orb # 指定虚拟机
ssh user@myvm@orb # 指定用户和虚拟机
IDE 设置
VS Code:安装 “Remote - SSH” 扩展,连接到 orb 或 myvm@orb
JetBrains:主机 localhost,端口 32222,密钥 ~/.orbstack/ssh/id_ed25519
Ansible
[servers]
myvm@orb ansible_user=ubuntu
SSH 代理转发是自动的。
Docker 集成
容器域名
docker run --name web nginx
# 访问:http://web.orb.local (Web 服务器无需指定端口)
# Compose:<service>.<project>.orb.local
HTTPS
所有 .orb.local 域名的零配置 HTTPS:
curl https://mycontainer.orb.local
自定义域名
docker run -l dev.orbstack.domains=myapp.local nginx
主机网络
docker run --net=host nginx
# localhost 双向工作
x86 模拟
docker run --platform linux/amd64 ubuntu
export DOCKER_DEFAULT_PLATFORM=linux/amd64 # 默认使用 x86
容器中的 SSH 代理
docker run -v /run/host-services/ssh-auth.sock:/agent.sock \
-e SSH_AUTH_SOCK=/agent.sock alpine
卷 vs 绑定挂载
为性能考虑,优先使用卷(数据保留在 Linux 中):
docker run -v mydata:/data alpine # 卷(快)
docker run -v ~/code:/code alpine # 绑定挂载(慢)
Kubernetes
orb start k8s # 启动集群
kubectl get nodes # 包含 kubectl
所有服务类型都可以从 macOS 访问,无需端口转发:
curl myservice.default.svc.cluster.local # cluster.local 有效
curl 192.168.194.20 # Pod IP 有效
curl myservice.k8s.orb.local # LoadBalancer 通配符
本地镜像立即可用(使用非 latest 标签或 imagePullPolicy: IfNotPresent)。
故障排除
orb report # 生成诊断报告
orb logs myvm # 虚拟机启动日志
orb logs docker # Docker 引擎日志
orb restart docker # 重启 Docker
orb reset # 恢复出厂设置(删除所有内容)
无法连接到 Docker 守护进程:使用 orb start 启动 OrbStack,或使用 docker context use orbstack 修复上下文
虚拟机无法启动:检查 orb logs myvm,尝试 orb restart myvm
Rosetta x86 错误:安装 x86 libc:
sudo dpkg --add-architecture amd64
sudo apt update && sudo apt install libc6:amd64
配置
orb config set rosetta true # 启用 x86 模拟
orb config set memory_mib 8192 # 内存限制(MiB)
orb config set cpu 4 # CPU 限制(核心数)
orb config set network_proxy auto # 代理(auto/none/url)
Docker 守护进程配置位于 ~/.orbstack/config/docker.json:
{
"insecure-registries": ["registry.local:5000"],
"registry-mirrors": ["https://mirror.gcr.io"]
}
使用 orb restart docker 应用更改。
从 Linux 运行 macOS 命令
mac open https://example.com # 在 macOS 浏览器中打开 URL
mac uname -a # 运行 macOS 命令
mac link brew # 链接命令以便重用
mac notify "构建完成" # 发送通知
转发环境变量:
ORBENV=AWS_PROFILE:EDITOR orb ./deploy.sh