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

Docker Compose部署Mongo副本集:mongosetup连接失败求助

问题解决:Docker Compose中MongoDB副本集初始化失败(连接被拒绝)

问题根源

你的mongodb服务启动时指定了--bind_ip localhost,这会让MongoDB仅监听容器内部的localhost接口。而mongosetup容器是通过Docker Compose内部网络,用服务名mongodb发起连接,该请求属于mongodb容器的外部请求,因此被拒绝。

手动进入mongodb容器能成功初始化,是因为你在容器内部使用localhost访问,符合bind_ip的限制规则。

修复方案

1. 修改MongoDB的绑定地址

更新docker-compose.yml中mongodb服务的command参数,将--bind_ip localhost改为--bind_ip 0.0.0.0(允许所有地址访问),或者直接去掉该参数(MongoDB默认会绑定所有可用地址):

services:
  mongodb:
    # ... 其他配置保持不变
    command: mongod --replSet testRs --keyFile /test/keyfile --bind_ip 0.0.0.0;

2. 优化初始化脚本(可选,提升可靠性)

原有的sleep 10是固定等待,可能在MongoDB未完全就绪时就尝试连接。可以替换成循环等待MongoDB启动的脚本,确保服务就绪后再执行初始化:

mongosetup:
  image: mongo
  depends_on:
    - mongodb
  restart: 'no'
  entrypoint:
    [
      'bash',
      '-c',
      "until mongosh admin --host mongodb:27017 -u root -p example --eval 'db.runCommand({ ping: 1 })'; do echo '等待MongoDB启动...'; sleep 2; done; mongosh admin --host mongodb:27017 -u root -p example --eval 'rs.initiate()'",
    ]

验证步骤

  1. 停止并清理现有容器:docker-compose down -v
  2. 重新启动服务:docker-compose up -d
  3. 查看mongosetup容器日志:docker-compose logs mongosetup,确认初始化成功
  4. 进入mongodb容器验证副本集状态:docker exec -it mongodb mongosh -u root -p example --eval 'rs.status()'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:15:39