You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:15:00