Docker Compose部署RocketChat无法连接MongoDB容器求助
问题解决步骤
1. 修正MongoDB连接地址
Docker Compose网络中,容器间需通过服务名互相访问,而非localhost——RocketChat容器内的localhost指向自身,而非Mongo容器。需将MONGO_URL和MONGO_OPLOG_URL中的localhost替换为Mongo服务名mongo:
MONGO_URL=mongodb://mongo:27017/rocketchat?replicaSet=rs0 MONGO_OPLOG_URL=mongodb://mongo:27017/local?replicaSet=rs0
2. 修正错误的环境变量与Expose配置
PORT环境变量仅需填写端口号,移除映射格式,改为:PORT=3000expose字段用于声明容器内部开放端口,无需主机映射,将3000:3000和27017:27017改为单纯端口号:# RocketChat部分 expose: - 3000 # Mongo部分 expose: - 27017
3. 初始化MongoDB副本集
虽然已指定--replSet rs0参数,但Mongo容器启动后需手动初始化副本集:
- 进入Mongo容器:
docker exec -it <你的Mongo容器名> mongo
- 在Mongo Shell中执行初始化命令:
rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "mongo:27017" }] })
执行rs.status()查看状态,返回ok: 1即为初始化成功。
修正后的完整docker-compose.yml
version: '3' services: rocketchat: image: rocketchat/rocket.chat:latest ports: - "3000:3000" environment: - MONGO_URL=mongodb://mongo:27017/rocketchat?replicaSet=rs0 - MONGO_OPLOG_URL=mongodb://mongo:27017/local?replicaSet=rs0 - ROOT_URL=http://localhost:3000 - PORT=3000 depends_on: - mongo expose: - 3000 restart: unless-stopped networks: - rocketchat-network mongo: image: mongo:5 volumes: - ./data:/data/db command: mongod --oplogSize 128 --replSet rs0 expose: - 27017 restart: unless-stopped networks: - rocketchat-network networks: rocketchat-network: driver: bridge
重启服务验证
停止并删除现有容器后重新启动:
docker-compose down docker-compose up -d
待Mongo副本集初始化完成,RocketChat即可正常连接MongoDB。
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

