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

同网络Docker容器无法通信 MongoDB连接127.0.0.1被拒绝排查

Docker容器跨服务连接MongoDB失败故障定位

核心故障原因

连接失败的直接诱因是MongoDB连接地址配置错误:你在worker服务的环境变量中配置的MONGO_URI值为mongodb://localhost:27017/,而容器内的127.0.0.1/localhost指向的是worker容器自身的回环网络地址,并非同网络下部署的MongoDB容器,因此会抛出dial tcp 127.0.0.1:27017: connect: connection refused的报错。

配置逻辑矛盾点

  • 你配置RabbitMQ连接时的写法是正确的:RABBITMQ_URI=amqp://user:password@rabbitmq:5672/,直接使用了容器名rabbitmq作为连接主机,同自定义桥接网络下Docker内置DNS会自动将容器名解析为对应容器的内网IP,这也是RabbitMQ可以正常连通的原因。
  • 从docker inspect network返回的结果可以确认,MongoDB容器在app_network中的注册名称就是e-learning,内网IP为172.20.0.2,和worker容器不属于同一个网络命名空间,不可能通过worker自身的localhost访问到。
  • 配置中写的external_links字段属于多余配置:加入同一个自定义桥接网络的容器,默认就支持通过容器名互相解析访问,不需要额外配置链路规则。
  • 额外配置隐患:你当前的环境变量值外层包裹了双引号,Docker Compose解析列表格式的environment配置时,会把这层双引号识别为变量值的一部分,可能引发后续URI解析异常。

修复操作

  1. 修改docker-compose.yml中worker服务的环境变量配置,调整后内容如下:
    environment:
     - MONGO_URI=mongodb://e-learning:27017/
     - MONGO_DATABASE=e-learning
     - RABBITMQ_URI=amqp://user:password@rabbitmq:5672/
     - RABBITMQ_QUEUE=upload
    
  2. 重建worker容器让配置生效,执行命令:
    docker-compose up -d --force-recreate worker
    

连通性验证

重建完成后可进入worker容器内部验证端口连通性:

# 进入worker容器命令行
docker exec -it video-transformation-worker-1 sh
# 测试MongoDB端口连通性
wget e-learning:27017

如果返回端口响应则说明网络链路正常,服务启动后即可正常完成数据库更新操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:39:18