1510 字
8 分钟
MacBook 2025 M4 笔记本Docker本地微服务环境完整部署指南

MacBook 2025 M4 笔记本 Docker 本地微服务环境完整部署指南#

本指南旨在为基于 Apple Silicon M4 架构的 MacBook 提供一套轻量、稳定、易于调试的本地微服务底座(包含 MySQL、Redis、Nacos 与 RocketMQ)。配置已针对 Mac 本地资源占用和 IDEA 宿主机直连调试进行了优化。


第一步:构建最佳目录结构#

为了避免 Docker 挂载数据卷时出现路径混乱或无权限(Permission Denied)的问题,我们需要预先在宿主机上创建好标准的工作空间和数据挂载目录。

请打开 Mac 终端,复制并一次性执行以下完整脚本,它将为您建立 ~/mac-dev-env 工作主目录以及所有依赖的子文件夹:

Terminal window
# 1. 创建并进入你的本地微服务环境主工作目录
mkdir -p ~/mac-dev-env
cd ~/mac-dev-env
# 2. 在当前目录下,创建 MySQL、Redis 的数据挂载目录,以及 RocketMQ 的配置目录
mkdir -p ./data/mysql
mkdir -p ./data/redis
mkdir -p ./rocketmq
# 3. 创建 Nacos 的数据与日志挂载目录(用于持久化,避免 docker compose down 后丢配置)
mkdir -p ./data/nacos/data
mkdir -p ./data/nacos/logs
# 4. 创建 RocketMQ 特殊的绝对路径数据目录(存放日志和持久化存储)
mkdir -p ~/docker-data/rocketmq/{logs,store}

执行完毕后,您的核心工作目录已就绪,且 Nacos/RocketMQ 所需的数据挂载目录也已创建完成。


第二步:配置环境变量文件(推荐)#

为了让编排文件更易维护,同时避免启动时出现环境变量缺失提示,建议在工作根目录创建 .env 文件统一管理变量。

请在 ~/mac-dev-env 下创建文件 .env,并写入以下内容:

Terminal window
cd ~/mac-dev-env
cat > .env <<'EOF'
MYSQL_ROOT_PASSWORD=lsdfsdf!@#
TZ=Asia/Shanghai
EOF

第三步:配置 RocketMQ(本地直连优化版)#

为了让宿主机(您的 Mac)上运行的 IDEA 能够直连 RocketMQ 容器收发消息,我们需要一份定制化的 Broker 配置。

请创建文件 ~/mac-dev-env/rocketmq/broker.conf,并将以下完整配置粘贴进去:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# ---- 开发环境优化 ----
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true
# 容器内 namesrv 地址(容器里不能写 127.0.0.1)
namesrvAddr = rocketmq-namesrv:9876
# 减少内存映射文件大小
mapedFileSizeCommitLog = 268435456
mapedFileSizeConsumeQueue = 2097152
# 数据目录(映射到宿主机 ${HOME}/docker-data/rocketmq/store)
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/store/commitlog
storePathConsumeQueue=/home/rocketmq/store/consumequeue
storePathIndex=/home/rocketmq/store/index
storeCheckpoint=/home/rocketmq/store/checkpoint
abortFile=/home/rocketmq/store/abort
# 宿主机 IDEA 跑客户端:broker 宣告 127.0.0.1 最稳
brokerIP1=127.0.0.1

第四步:配置 Docker Compose 核心编排文件#

请在工作根目录下创建文件 ~/mac-dev-env/docker-compose.yml,并将以下完整内容粘贴进去:

services:
mysql:
image: mysql:8.4
container_name: dev-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: micro_platform
TZ: ${TZ}
command:
[
"mysqld",
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_general_ci",
"--default-time-zone=+08:00",
"--innodb-buffer-pool-size=256M",
"--max-connections=200"
]
ports:
- "127.0.0.1:3306:3306"
volumes:
- ./data/mysql:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p\"${MYSQL_ROOT_PASSWORD}\" --silent"]
interval: 10s
timeout: 5s
retries: 10
networks:
- devnet
redis:
image: redis:7.4-alpine
container_name: dev-redis
restart: unless-stopped
command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"]
ports:
- "127.0.0.1:6379:6379"
volumes:
- ./data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 10
networks:
- devnet
nacos:
image: nacos/nacos-server:v2.4.3-slim
container_name: dev-nacos
restart: unless-stopped
environment:
MODE: standalone
NACOS_AUTH_ENABLE: "false"
JVM_XMS: "256m"
JVM_XMX: "256m"
JVM_XMN: "128m"
PREFER_HOST_MODE: hostname
ports:
- "127.0.0.1:8848:8848"
- "127.0.0.1:9848:9848"
- "127.0.0.1:9849:9849"
volumes:
- ./data/nacos/data:/home/nacos/data
- ./data/nacos/logs:/home/nacos/logs
networks:
- devnet
rocketmq-namesrv:
image: apache/rocketmq:5.3.4
container_name: dev-rmq-namesrv
restart: unless-stopped
command: ["sh", "mqnamesrv"]
environment:
JAVA_OPT_EXT: "-Xms256m -Xmx256m -Xmn128m -XX:MaxDirectMemorySize=128m"
ports:
- "127.0.0.1:9876:9876"
volumes:
- ${HOME}/docker-data/rocketmq/logs:/home/rocketmq/logs
networks:
- devnet
rocketmq-broker:
image: apache/rocketmq:5.3.4
container_name: dev-rmq-broker
restart: unless-stopped
depends_on:
- rocketmq-namesrv
command: ["sh", "mqbroker", "-c", "/home/rocketmq/rocketmq-5.3.4/conf/broker.conf"]
environment:
NAMESRV_ADDR: "rocketmq-namesrv:9876"
JAVA_OPT_EXT: "-Xms512m -Xmx512m -Xmn256m -XX:MaxDirectMemorySize=256m"
ports:
- "127.0.0.1:10909:10909"
- "127.0.0.1:10911:10911"
- "127.0.0.1:10912:10912"
volumes:
- ./rocketmq/broker.conf:/home/rocketmq/rocketmq-5.3.4/conf/broker.conf
- ${HOME}/docker-data/rocketmq/logs:/home/rocketmq/logs
- ${HOME}/docker-data/rocketmq/store:/home/rocketmq/store
networks:
- devnet
networks:
devnet:
driver: bridge

说明: MySQL 限制 buffer pool,Nacos 单机免鉴权并做数据持久化,RocketMQ 使用宿主机绝对路径持久化 store/logs


第五步:镜像拉取与一键启动#

请确保终端路径处于 ~/mac-dev-env,并且 Docker Desktop 已启动。

建议按以下顺序启动(先拉镜像、再启动容器):

Terminal window
cd ~/mac-dev-env
docker compose down
docker compose pull
docker compose up -d
docker compose ps

第六步:Docker Desktop 常用设置(拉取镜像失败时必看)#

在网络环境不稳定、存在代理/VPN、或镜像拉取频繁中断时,可能出现拉取层文件失败的情况。遇到此类问题时,建议检查 Docker Desktop 的通用设置项,完成后重启 Docker Desktop 再重新执行 docker compose pull

另外建议在拉取失败时先单独拉取一个轻量镜像用于验证网络链路:

Terminal window
docker pull redis:7.4-alpine

第七步:IDEA / 宿主机直连关键地址#

服务地址备注
MySQL127.0.0.1:3306用户 root,密码 lsdfsdf!@#
Redis127.0.0.1:6379无密码
Nacos 控制台http://127.0.0.1:8848/nacos免鉴权
RocketMQ NameServer127.0.0.1:9876
RocketMQ Broker127.0.0.1:10911brokerIP1=127.0.0.1 决定

第八步:常用排查命令#

当服务启动异常或端口不可用时,可使用以下命令快速定位:

Terminal window
cd ~/mac-dev-env
# ---------------------------
# 1) 查看服务状态(推荐)
# ---------------------------
docker compose ps
# ---------------------------
# 2) 查看日志(推荐)
# ---------------------------
# 看某个服务日志(推荐:定位单点问题最清晰)
docker compose logs -f --tail=200 mysql
docker compose logs -f --tail=200 redis
docker compose logs -f --tail=200 nacos
docker compose logs -f --tail=200 rocketmq-namesrv
docker compose logs -f --tail=200 rocketmq-broker
# 看全部服务日志(推荐:不确定是哪个服务时)
docker compose logs -f --tail=200
# ---------------------------
# 3) 启动 / 停止 / 重启(编排级别)
# ---------------------------
# 启动(推荐:日常启动)
docker compose up -d
# 停止(推荐:临时停一下,后续还要继续用)
docker compose stop
# 重启全部服务(推荐:配置没变,只是服务状态不对/想快速恢复)
docker compose restart
# 重启单个服务(推荐:只影响一个组件)
# 示例:只重启 mysql
docker compose restart mysql
# 停止并移除容器(推荐:你改了 docker-compose.yml 或挂载配置,需要“重建容器”)
# 注意:不带 -v 不会删除你挂载到宿主机的数据目录
docker compose down
docker compose up -d
# ---------------------------
# 4) Docker Desktop 启动 / 重启(macOS)
# ---------------------------
# 启动 Docker Desktop(推荐:Docker 没开时)
open -a Docker
# 重启 Docker Desktop(推荐:遇到 pull EOF、网络异常、Docker 引擎卡住等)
osascript -e 'quit app "Docker"'
open -a Docker
# 关闭 Docker Desktop(不推荐常用;相当于停止 Docker 引擎)
osascript -e 'quit app "Docker"'
# ---------------------------
# 5) 进入容器排查(推荐:需要看容器内文件/配置/进程时)
# ---------------------------
docker exec -it dev-mysql bash
docker exec -it dev-redis sh
docker exec -it dev-nacos sh
docker exec -it dev-rmq-broker sh
MacBook 2025 M4 笔记本Docker本地微服务环境完整部署指南
https://twenhub.com/posts/macbook-2025-m4-bi-ji-ben-dockerben-di-wei-fu-wu-huan-jing-wan-zheng-bu-shu-zhi-/
作者
Twenhub
发布于
2026-02-26
许可协议
CC BY-NC-SA 4.0