Docker Compose 编排全栈应用需聚焦“写→启→查→调”闭环:前端挂载 dist 目录至 Nginx,后端监听 0.0.0.0:3000,数据库配 environment 和 volumes;用 .env 抽离变量,服务间通过服务名通信;加 healthcheck 与重试机制;执行 build、up -d、logs/curl 验证即可。
用 docker compose 编排多服务并快速部署全栈 web 应用,核心不是堆配置,而是抓住“写→启→查→调”四个动作闭环。重点在于让前端、后端、数据库各自独立又协同工作,不依赖手动装环境、改端口、配网络。
明确每个服务的职责和交付方式
- 前端:一般不打包镜像,直接把构建好的
dist/目录挂载进 Nginx 容器,靠volumes实时同步,改完代码npm run build就生效 - 后端:用
build:指向本地Dockerfile,便于调试;启动后监听0.0.0.0:3000(不是localhost),方便被其他容器访问 - 数据库:必须配
environment(如POSTGRES_PASSWORD)和volumes(如./pgdata:/var/lib/postgresql/data),否则重启就丢数据
用 .env 抽离变量,避免硬编码
把密码、端口、环境名等易变参数写进 .env 文件:
DB_PASSWORD=mysecretpass API_PORT=3000 FRONTEND_PORT=80
docker-compose.yml 里直接引用 ${DB_PASSWORD},不同环境只需换一个 .env 文件,不用动 YAML。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
服务间通信走内部网络名,不碰 localhost
Compose 默认建一个桥接网络,所有服务自动互通。后端连数据库写 postgres://user:${DB_PASSWORD}@db:5432/myapp,其中 db 是服务名,不是 IP 或 localhost;Nginx 反向代理后端也写 proxy_pass http://backend:3000,不是 127.0.0.1。
加健康检查 + 应用层重试,别只靠 depends_ondepends_on 只控制启动顺序,不保证服务已就绪。比如后端启动快,但数据库还在初始化。建议:
- 在数据库服务里加
healthcheck,例如检测pg_isready -U user -d myapp - 后端代码里对数据库连接做带退避的重试(如最多 10 次,每次间隔 1 秒)
- Nginx 配置
upstream时启用max_fails=3 fail_timeout=30s,自动踢掉不可用实例
一键启动与验证流程
执行三步即可跑通:
-
docker-compose build(首次或代码变动后) -
docker-compose up -d(后台启动全部服务) -
docker-compose logs -f backend或curl http://localhost:8080/api/health看是否返回正常响应
不复杂但容易忽略

















