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

使用docker-compose部署时Web应用无法连接MongoDB的问题求助

解决Docker-Compose中Web应用连接MongoDB失败的问题

从错误日志可以明确:Web应用未读取到配置的MONGODB_URI, fallback到了默认的localhost:27017连接地址,导致连接被拒绝。以下是具体解决步骤:

1. 修复环境变量的空格问题

你的docker-compose.yml中,环境变量定义时等号后存在多余空格,会导致变量值包含前导空格,应用解析时无法正确识别。修改如下:

# 原错误配置
# - MONGODB_NAME= mydb
# - MONGODB_URI= mongodb://mydb:mypass@mongohost:27017/mydb

# 修改后
- MONGODB_NAME=mydb
- MONGODB_URI=mongodb://mydb:mypass@mongohost:27017/mydb

2. 添加MongoDB健康检查,确保服务就绪后启动应用

depends_on仅保证容器启动顺序,不等待MongoDB服务完全就绪。添加健康检查,让应用在MongoDB真正可用后再启动:
在mongohost服务中添加健康检查配置:

services:
  mongohost:
    # 其他配置不变
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 5s
      timeout: 5s
      retries: 5

同时修改my-app的depends_on配置:

my-app:
  # 其他配置不变
  depends_on: 
    mongohost:
      condition: service_healthy

3. 验证MongoDB初始化脚本的正确性

你的init-mongo.sh逻辑是正确的,但可以通过容器日志确认脚本是否执行成功:

docker logs mongohost

如果看到类似Successfully added user: { user: "mydb", roles: [ "readWrite" ] }的日志,说明初始化正常。

修改后的完整docker-compose.yml示例

version: '2.2'
services:
  mongohost:
    image: mongo
    restart: unless-stopped
    container_name: mongohost
    hostname: mongohost
    ports:
      - "27017:27017"
    volumes:
      - ./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh
    environment:
      MONGO_INITDB_ROOT_USERNAME: mydb
      MONGO_INITDB_ROOT_PASSWORD: mypass
      MONGODB_INIT_DATABASE: mydb
      MONGODB_USER: mydb
      MONGODB_DATABASE: mydb
      MONGODB_PASS: mypass
    networks:
      - mongohost
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 5s
      timeout: 5s
      retries: 5

  my-app:
    image: aws image
    container_name: my-app
    hostname: my-app
    ports:
      - "8080:8080"
    environment:
      - MONGODB_NAME=mydb
      - MONGODB_URI=mongodb://mydb:mypass@mongohost:27017/mydb
    depends_on: 
      mongohost:
        condition: service_healthy
    networks:
      - mongohost  

networks:
  mongohost:
    driver: bridge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:14:54