返回列表 发布新帖
查看: 402|回复: 0

OpenClow小龙虾:Docker Compose 一站式部署实践

988

主题

0

回帖

833

积分

高级会员

积分
833
发表于 6 天前 | 查看全部 |阅读模式
最近在部署一个本地微服务项目时,Docker Compose 的配置卡了我整整两天。说说我的实际需求吧:项目中有三个服务——一个 Python API,一个 Redis 缓存,一个 PostgreSQL 数据库。单独写三个 Dockerfile 后发现网络连不通,环境变量也没传过去,调试起来像拆盲盒。

后来在 Stack Overflow 上看到一个思路:所有服务统一写在 docker-compose.yml 里,用 services 字段定义,然后通过 volumes 挂载配置文件。关键点是环境变量要用 .env 文件集中管理,Docker Compose 会自动读取。我在本地创建了一个 .env 文件,里面放了 DB_PASSWORD=secret123 这类内容,然后在 compose 文件里用 environment: file: .env 的方式引用。这样修改后服务启动就不再依赖手动参数,部署速度提升明显。

对于 PostgreSQL 那块,我发现如果直接从镜像启动会默认挂载 /var/lib/postgresql 到宿主机的 /tmp,下次启动会找不到旧数据。解决方法是自己创建一个 initdb.sh 脚本,第一次启动时执行 initdb 命令初始化数据目录,后续启动直接运行。这个细节很多人容易忽略,我之前就是卡在这里。

还有一个容易踩坑的地方是 ports 映射。很多人写 8000:8000 时,本地 8000 被多个服务占用了,结果只能改端口。其实可以写成 0.0.0.0:8000:8000,这样服务会监听所有网络接口,外网也能访问。这个在测试环境和本地开发之间切换时特别有用。

最后附上我的 docker-compose.yml 模板,大家可以参考调整自己的服务配置。如果你有具体的服务类型,也可以告诉我,我可以帮你写对应的 Compose 片段。
回复 转播

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表