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

Docker部署RocketChat时MongoDB带密码连接失败求助

问题分析

从错误日志来看,核心问题集中在两点:

  • MongoServerSelectionError: getaddrinfo EAI_AGAIN mongodb:RocketChat容器无法解析MongoDB服务域名,根源是Docker Compose配置的服务结构错误,导致服务间网络不通。
  • ReplicaSetNoPrimary:MongoDB副本集未完成初始化,RocketChat连接时找不到主节点,最终触发拓扑关闭错误。

另外你提供的compose.yml存在语法错误(service::rocketchat::为无效格式),且MongoDB的环境变量未归属到对应服务下,这是网络解析失败的直接原因。

修正后的配置方案

1. 保留.env文件内容不变

MONGODB_ROOT_USERNAME=root
MONGODB_ROOT_PASSWORD=rootpass

2. 重新编写compose.yml

确保服务结构正确,添加健康检查保证MongoDB初始化完成后再启动RocketChat:

version: '3.8'

services:
  mongodb:
    image: mongo:6.0
    volumes:
      - mongodb_data:/data/db
    environment:
      MONGODB_REPLICA_SET_MODE: primary
      MONGODB_REPLICA_SET_NAME: rs0
      MONGODB_DATABASE: rocketchat
      ALLOW_EMPTY_PASSWORD: "no"
      MONGODB_ROOT_USERNAME: ${MONGODB_ROOT_USERNAME}
      MONGODB_ROOT_PASSWORD: ${MONGODB_ROOT_PASSWORD}
      MONGODB_PORT_NUMBER: 27017
      MONGODB_ENABLE_JOURNAL: "true"
    command: ["--replSet", "rs0", "--bind_ip_all"]
    healthcheck:
      test: echo 'rs.status().ok' | mongosh --port 27017 -u ${MONGODB_ROOT_USERNAME} -p ${MONGODB_ROOT_PASSWORD} --authenticationDatabase admin --quiet
      interval: 10s
      timeout: 10s
      retries: 5

  rocketchat:
    image: rocketchat/rocket.chat:latest
    volumes:
      - rocketchat_data:/app/uploads
    environment:
      MONGO_URL: "mongodb://${MONGODB_ROOT_USERNAME}:${MONGODB_ROOT_PASSWORD}@mongodb:27017/rocketchat?authSource=admin&replicaSet=rs0"
      MONGO_OPLOG_URL: "mongodb://${MONGODB_ROOT_USERNAME}:${MONGODB_ROOT_PASSWORD}@mongodb:27017/local?authSource=admin&replicaSet=rs0"
      ROOT_URL: http://localhost:3000  # 根据实际域名修改
      PORT: 3000
    ports:
      - "3000:3000"
    depends_on:
      mongodb:
        condition: service_healthy

volumes:
  mongodb_data:
  rocketchat_data:

3. 关键修正点说明

  • 修复服务结构:将mongodb和rocketchat拆分为独立服务,确保同属一个Docker网络,域名解析正常。
  • 添加健康检查:通过mongosh验证副本集状态,只有当副本集初始化完成且认证正常时,才启动RocketChat。
  • 明确启动命令:强制MongoDB加载副本集配置并允许所有IP绑定,避免IP限制导致的连接问题。
  • 修正变量格式:将布尔类型的环境变量用字符串包裹,避免Docker Compose解析出错。
启动验证步骤
  1. 清理旧容器与数据:
docker compose down -v
  1. 重新启动服务:
docker compose up -d
  1. 查看日志确认状态:
docker compose logs -f rocketchat

当日志中出现RocketChat is running相关内容时,说明连接成功。

内容的提问来源于stack exchange,提问作者Ivl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:34:56