当前位置: 首页 > news >正文

mac 搭建docker-compose,部署docker应用

Mac 上搭建 Docker / Docker Compose 并部署应用 的“从零到可用”清晰步骤(适配 Intel 与 Apple Silicon)。我用两个示例演示:n8n 单服务web+db 典型组合。直接跟着做即可。

1) 安装与准备

方案 A:Docker Desktop(最省事,含 Compose v2)

  1. 去官网下载并安装 Docker Desktop for Mac(M 系列或 Intel 版本对应下载)。

  2. 安装后打开 Docker Desktop,等待右上角鲸鱼图标稳定(Daemon 已就绪)。

  3. 终端验证:

    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/ 下新建 .envdocker-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 里把工程目录加入可共享路径。
http://www.dtcms.com/a/341024.html

相关文章:

  • AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
  • pcl求平面点云的边界凸包点
  • Frida Hook Android Activity生命周期全方法监控方案
  • 哈希:字母异位词分组
  • RHCA07-Linux跟踪工具及CPU调优
  • Linux I/O 多路复用实战:深入剖析 Select 与 Poll
  • capsh 命令详解
  • 【机器学习深度学习】Ollama、vLLM、LMDeploy对比:选择适合你的 LLM 推理框架
  • Objective-C 版本的 LiveEventBus 效果
  • vue+openlayers示例:适配arcgis矢量瓦片服务以及样式(附源码下载)
  • 英伟达Blackwell架构下的中国特供版AI芯片:B30A与RTX 6000D,是技术妥协还是市场新策略?
  • 基于单片机太阳能充电器/太阳能转换电能
  • C端高并发项目都有哪些
  • Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考
  • C++围绕音视频相关的资料都有哪些?如何进行学习
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码2
  • 【ansible】4.实施任务控制
  • 【沉浸式解决问题】peewee.ImproperlyConfigured: MySQL driver not installed!
  • 亚马逊运营破局:销量与ACOS的动态平衡之道
  • 网页作品惊艳亮相!这个浪浪山小妖怪网站太治愈了!
  • 8 月中 汇报下近半个月都在做些什么
  • VR交通安全学习机-VR交通普法体验馆方案
  • Vue3源码reactivity响应式篇之数组代理的方法
  • Android studio gradle 下载不下来
  • 23种设计模式——模板方法模式(Template Method Pattern)详解
  • 在 Ubuntu Linux LTS 上安装 SimpleScreenRecorder 以录制屏幕
  • 软考中级习题与解答——第一章_数据结构与算法基础(1)
  • 软考网工选择题节选-2
  • uniapp:h5链接拉起支付宝支付
  • uni-app跨端开发最后一公里:详解应用上架各大应用商店全流程