mac 搭建docker-compose,部署docker应用
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:latestcontainer_name: n8nports:- "5678:5678"environment:- N8N_SECURE_COOKIE=false- GENERIC_TIMEZONE=Asia/Shanghai # 按需改user: "${UID:-1000}:${GID:-1000}"volumes:- ./data:/home/node/.n8nrestart: 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:16container_name: webstack-dbenvironment:- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}- POSTGRES_USER=${POSTGRES_USER}- POSTGRES_DB=${POSTGRES_DB}- TZ=${TZ}volumes:- ./pgdata:/var/lib/postgresql/datahealthcheck:test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER"]interval: 5stimeout: 3sretries: 10restart: unless-stoppedweb:image: nginx:alpinecontainer_name: webstack-webports:- "8080:80"volumes:- ./site:/usr/share/nginx/html:rodepends_on:db:condition: service_healthyrestart: 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 里把工程目录加入可共享路径。