Mac 上搭建 Docker / Docker Compose 并部署应用 的“从零到可用”清晰步骤(适配 Intel 与 Apple Silicon)。我用两个示例演示:n8n 单服务与web+db 典型组合。直接跟着做即可。
1) 安装与准备
方案 A:Docker Desktop(最省事,含 Compose v2)
-
去官网下载并安装 Docker Desktop for Mac(M 系列或 Intel 版本对应下载)。
-
安装后打开 Docker Desktop,等待右上角鲸鱼图标稳定(Daemon 已就绪)。
-
终端验证:
docker --version docker compose version
说明:Compose v2 命令为
docker compose ...(空格)。如果你更习惯旧语法docker-compose,Docker Desktop 也会附带兼容层。
方案 B:Colima(轻量开源替代)
如果不想装 Desktop,可用 Homebrew+Colima:
brew install colima docker docker-compose
colima start
docker --version
docker compose version
Apple Silicon 如需 x86 镜像,可用
colima start --arch x86_64(性能略降)。
2) 目录与权限
为你的项目建一个目录并放置 Compose 文件:
mkdir -p ~/apps/myapp && cd ~/apps/myapp
注意 Mac 文件共享:默认只有你的用户目录是可挂载的(如 ~/apps)。把 volumes: 指向用户目录内的路径,避免权限问题。
3) 示例一:n8n(单服务)
在 ~/apps/n8n/ 下新建 docker-compose.yml:
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
environment:
- N8N_SECURE_COOKIE=false
- GENERIC_TIMEZONE=Asia/Shanghai # 按需改
user: "${UID:-1000}:${GID:-1000}"
volumes:
- ./data:/home/node/.n8n
restart: unless-stopped
启动:
cd ~/apps/n8n
# 让容器以你当前用户身份运行(避免生成 root 文件)
export UID && export GID
docker compose up -d
docker compose logs -f
访问:http://localhost:5678
迁移自你之前的命令:这里等价于“后台运行、所有网段可访问(默认映射到 0.0.0.0)、持久化数据卷”的 Compose 版本。
4) 示例二:Web + Postgres(典型两容器)
在 ~/apps/webstack/ 下新建 .env 与 docker-compose.yml:
.env
POSTGRES_PASSWORD=secret123
POSTGRES_DB=appdb
POSTGRES_USER=appuser
TZ=Asia/Shanghai
docker-compose.yml
services:
db:
image: postgres:16
container_name: webstack-db
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_DB=${POSTGRES_DB}
- TZ=${TZ}
volumes:
- ./pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER"]
interval: 5s
timeout: 3s
retries: 10
restart: unless-stopped
web:
image: nginx:alpine
container_name: webstack-web
ports:
- "8080:80"
volumes:
- ./site:/usr/share/nginx/html:ro
depends_on:
db:
condition: service_healthy
restart: unless-stopped
初始化并启动:
mkdir -p ~/apps/webstack/site ~/apps/webstack/pgdata
echo "<h1>Hello from Nginx</h1>" > ~/apps/webstack/site/index.html
cd ~/apps/webstack
docker compose --env-file .env up -d
访问:http://localhost:8080
5) 常用操作
# 查看运行中容器
docker ps
# 查看项目服务状态
docker compose ps
# 查看日志
docker compose logs -f # 全部
docker compose logs -f web # 指定服务
# 构建(如果有 Dockerfile)
docker compose build
# 停止/删除
docker compose down # 停并删容器(不删卷)
docker compose down -v # 连带卷一起删(谨慎)
6) Apple Silicon(M1/M2/M3)提示
-
优先选择 多架构镜像(带
linux/arm64)。 -
遇到只支持 x86_64 的镜像:
-
Docker Desktop:设置里启用 Use Rosetta for x86/amd64 emulation(性能受影响)。
-
或手动拉取并指定平台:
docker pull --platform=linux/amd64 someimage:tag docker run --platform=linux/amd64 ...
-
-
自建镜像建议用 buildx 出多架构包:
docker buildx create --use docker buildx build --platform linux/amd64,linux/arm64 -t your/repo:tag --push .
7) 生产化加强(可选)
- Traefik/Nginx 反向代理 + HTTPS:用 Traefik 作为网关,按域名路由到各服务,自动签发/续签证书。
- 数据持久化:把数据库、应用数据目录都映射到
./data等路径,并纳入 Time Machine/备份。 - 备份:数据库用
pg_dump/mysqldump+cron(可用一个“backup”服务容器)定时备份至本地或对象存储。 - .env 管理:敏感变量放
.env,不要提交到仓库。
8) 常见问题排查
- 卷权限问题:挂载到你用户目录;必要时在服务上加
user: "${UID}:${GID}"。 - 端口被占用:换映射端口,如
"8081:80"。 - 镜像架构不匹配:指定
--platform或启用 Rosetta。 - 文件共享失败(Docker Desktop):Settings → Resources → File Sharing 里把工程目录加入可共享路径。
Mac搭建Docker Compose部署应用步骤
2561

被折叠的 条评论
为什么被折叠?



