← 返回首页

用 Docker Compose 部署一套小型微服务系统

· Docker / 部署

最近把练习用的一个微服务项目(网关 + 认证 + 业务服务 + PostgreSQL + MinIO + Nginx)完整搬进了 Docker Compose。整体不难,但启动顺序、时区、文件权限三个坑各耗了不少时间,记录下来。

一、启动顺序:健康检查比 depends_on 更可靠

compose 的 depends_on 只保证「容器启动」,不保证「服务就绪」。数据库容器刚起时端口还没监听,业务服务连上去直接报错。解决办法是给数据库配 healthcheck,依赖方用 condition: service_healthy:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U postgres"]
  interval: 5s
  retries: 30

二、时区:容器默认 UTC,业务时间全差 8 小时

业务里有大量按本地日期统计的逻辑(日结、生日提醒),容器里跑出来全是差 8 小时。在需要本地时间的服务里统一加 TZ: Asia/Shanghai,数据库容器也要加,否则时间戳落库就不对。

三、文件挂载权限:scp 上传的目录是 700

最隐蔽的一个:从 Windows 用 scp 把前端静态文件传到服务器后,目录权限是 700,Nginx 的 worker 进程(非 root)读不了,浏览器直接 403 Forbidden。一条命令修复:

chmod -R a+rX /opt/bms/web/dist

排查思路也记一下:网络通、安全组通、容器在跑,但页面 403,那基本就只剩「文件缺失或权限不足」两种可能,ls -la 一条命令看全。

小结