Docker Compose配置Postgres、RabbitMQ、Redis LTS版本环境咨询
开发背景
项目技术栈基于Postgres、RabbitMQ和Redis搭建,团队经常遇到这三款工具版本不一致引发的问题,在上次回顾会议中,团队决定通过Docker Compose解决该问题,已确认的环境变量列表如下:
DB_URL=postgresql://postgres:password@localhost:5432/nodejs-db CACHE_URL=redis://localhost:6379 BUS_URL=amqp://user:pass@localhost:5672
需求说明
需编写符合以下要求的Docker Compose配置文件:包含Postgres、RabbitMQ、Redis的LTS版本,所有服务运行在同一网络下、使用默认端口对外暴露,通过环境变量配置Docker容器。
现有配置存在的问题
- Postgres服务配置的
POSTGRES_USER、POSTGRES_PASSWORD和给定DB_URL中的认证信息(用户postgres、密码password)不匹配,且未指定初始化数据库名为nodejs-db,也未暴露默认5432端口,同时配置的DB_URL末尾多了多余的$符号 - RabbitMQ服务配置的
RABBITMQ_DEFAULT_USER、RABBITMQ_DEFAULT_PASS和给定BUS_URL中的认证信息(用户user、密码pass)不匹配 DB_URL、CACHE_URL、BUS_URL是业务服务连接中间件的地址,不属于Postgres、Redis、RabbitMQ本身的启动环境变量,放在对应服务的environment配置中完全无效,属于冗余错误配置- 未显式声明统一的自定义网络,虽然Docker Compose默认会为所有服务创建同一网络,但不符合显式管控的最佳实践
修正后的完整Docker Compose配置
version: "3.1" # 显式声明统一网络,所有服务加入该网络 networks: app-network: driver: bridge services: postgres: image: postgres:13.5 # 符合Postgres LTS版本要求 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: nodejs-db ports: - "5432:5432" # 暴露默认端口 networks: - app-network redis: image: redis:6.0.16 # 符合Redis LTS版本要求 ports: - "6379:6379" # 暴露默认端口 networks: - app-network rabbitmq: image: rabbitmq:3-management-alpine # 符合RabbitMQ 3.x LTS版本要求 container_name: "rabbitmq" environment: RABBITMQ_DEFAULT_USER: user RABBITMQ_DEFAULT_PASS: pass ports: - "5672:5672" # 暴露默认AMQP端口 - "15672:15672" # 暴露管理后台端口 networks: - app-network
补充说明
你项目用到的DB_URL、CACHE_URL、BUS_URL三个环境变量,是给业务服务使用的连接参数,不需要配置在中间件服务的启动参数中,你可以将这三个变量存放在项目根目录的.env文件中,或者配置在你业务服务的environment段下即可。
内容的提问来源于stack exchange,提问作者Medlide
相关产品推荐
相关产品推荐

