Docker Compose 多服务开发环境
用 Docker Compose 编排多服务开发环境:healthcheck + depends_on 保证启动顺序、环境变量管理、内部网络通信。
#type / howto
#status / growing
#tech / ops
#resource / docker
[!info] related notes
- 前置: Docker 核心概念
- 生产: Docker 多阶段构建
Docker Compose 多服务开发环境
关键设计
1. Healthcheck + depends_on
postgres:
healthcheck:
test: ['CMD-SHELL', 'pg_isready']
interval: 10s
retries: 5
api:
depends_on:
postgres:
condition: service_healthy # 等健康检查通过才启动
不只是”容器启动”,而是”服务真正可用”。
2. 环境变量默认值
environment:
POSTGRES_USER: ${DB_USER:-bodysense} # 优先 .env,默认 bodysense
3. 内部网络
networks:
bodysense-network:
driver: bridge
服务间通过服务名访问:postgres-dev:5432,不是 localhost。
4. 只暴露必要端口
数据库端口只映射到宿主机用于调试,生产环境不暴露。
开发模式选择
| 模式 | 前端 | 后端 | 数据库 |
|---|---|---|---|
| 纯本地 | pnpm dev:web | pnpm dev:api | Docker |
| 全 Docker | Docker | Docker | Docker |
推荐:数据库用 Docker,应用服务本地跑(热更新更快)。
常见问题
端口冲突
改 .env 中的端口映射。
容器间通信
用服务名(postgres-dev)而不是 localhost。容器内端口是原始端口(5432),不是映射端口。