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

Docker环境下Express连接MongoDB出现ECONNREFUSED问题求助

问题描述

使用Express应用连接MongoDB时遇到停滞问题,具体情况:

  • Express应用配置连接地址为mongodb://mongodb:27017/myapp
  • 启动后显示“Adding database support”后停滞,无法继续运行
  • 已确认数据库配置无误,且MongoDB实例可通过其他工具访问
  • Express和MongoDB均部署在Docker容器中,网络与端口配置符合要求

已尝试重新安装Docker、删除容器和镜像重新部署,问题仍存在。

控制台日志

[+] Running 4/4
 ✔ mongodb Pulled                                                                                                                     83.6s 
   ✔ 73d21f84dd46 Pull complete                                                                                                       65.4s 
 ✔ express Pulled                                                                                                                     95.3s 
   ✔ c9401701e983 Pull complete                                                                                                       54.8s 
[+] Running 1/3
 ✔ Network docker_web_default      Created                                                                                             2.2s 
 ⠦ Container docker_web-mongodb-1  Created                                                                                             4.6s 
 ⠏ Container docker_web-express-1  Created                                                                                             1.9s 
Attaching to express-1, mongodb-1
mongodb-1  | mongodb 12:48:15.14 INFO  ==> 
mongodb-1  | mongodb 12:48:15.14 INFO  ==> Welcome to the Bitnami mongodb container
mongodb-1  | mongodb 12:48:15.15 INFO  ==> Subscribe to project updates by watching https://github.com/bitnami/containers
mongodb-1  | mongodb 12:48:15.15 INFO  ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues
mongodb-1  | mongodb 12:48:15.15 INFO  ==> Upgrade to Tanzu Application Catalog for production environments to access custom-configured and pre-packaged software components. Gain enhanced features, including Software Bill of Materials (SBOM), CVE scan result reports, and VEX documents. To learn more, visit https://bitnami.com/enterprise
mongodb-1  | mongodb 12:48:15.15 INFO  ==> 
mongodb-1  | mongodb 12:48:15.16 INFO  ==> ** Starting MongoDB setup **
mongodb-1  | mongodb 12:48:15.20 INFO  ==> Validating settings in MONGODB_* env vars...
mongodb-1  | mongodb 12:48:16.77 WARN  ==> You set the environment variable ALLOW_EMPTY_PASSWORD=yes. For safety reasons, do not use this flag in a production environment.
mongodb-1  | mongodb 12:48:16.79 INFO  ==> Initializing MongoDB...
mongodb-1  | mongodb 12:48:16.89 INFO  ==> Deploying MongoDB from scratch...
express-1  | express 12:48:20.95 INFO  ==> 
express-1  | express 12:48:21.02 INFO  ==> Welcome to the Bitnami express container
express-1  | express 12:48:21.02 INFO  ==> Subscribe to project updates by watching https://github.com/bitnami/containers
express-1  | express 12:48:21.03 INFO  ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues
express-1  | express 12:48:21.03 INFO  ==> Upgrade to Tanzu Application Catalog for production environments to access custom-configured and pre-packaged software components. Gain enhanced features, including Software Bill of Materials (SBOM), CVE scan result reports, and VEX documents. To learn more, visit https://bitnami.com/enterprise
express-1  | express 12:48:21.03 INFO  ==> 
express-1  | express 12:48:21.04 INFO  ==> ** Running Express setup **
express-1  | express 12:48:21.06 INFO  ==> Validating settings in EXPRESS_* environment variables...
express-1  | express 12:48:21.06 WARN  ==> EXPRESS_DATABASE_TYPE was not set, the database type will be detected automatically
express-1  | express 12:48:21.44 INFO  ==> Creating Express application in /app
express-1  | express 12:48:23.03 INFO  ==> Adding database support
mongodb-1  | MongoNetworkError: connect ECONNREFUSED 172.18.0.2:27017
mongodb-1  | mongodb 12:48:26.05 INFO  ==> Creating users...
mongodb-1  | mongodb 12:48:26.05 INFO  ==> Users created
mongodb-1  | mongodb 12:48:26.08 INFO  ==> Stopping MongoDB...
mongodb-1  | 
mongodb-1  | mongodb 12:48:28.11 INFO  ==> ** MongoDB setup finished! **
mongodb-1  | mongodb 12:48:28.15 INFO  ==> ** Starting MongoDB **

docker-compose.yml

# Copyright VMware, Inc.
# SPDX-License-Identifier: APACHE-2.0

version: '2'

services:
  mongodb:
    image: docker.io/bitnami/mongodb:7.0
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
  express:
    image: docker.io/bitnami/express:4
    ports:
      - '3000:3000'
    environment:
      - PORT=3000
      - NODE_ENV=development
      - DATABASE_URL=mongodb://mongodb:27017/myapp
      - EXPRESS_SKIP_DB_WAIT=0
      - EXPRESS_SKIP_DB_MIGRATION=0
      - EXPRESS_SKIP_NPM_INSTALL=0
      - EXPRESS_SKIP_BOWER_INSTALL=0
    volumes:
      - './my-project:/app'
    depends_on:
      - mongodb

可能原因与排查解决步骤

核心原因

从日志可明确:
Express在12:48:23尝试连接MongoDB时,MongoDB仍处于初始化流程(创建用户、重启服务),直到12:48:28才正式启动服务。Docker的depends_on仅保证MongoDB容器启动,不等待内部服务完全就绪,导致Express连接时端口未开放,最终停滞。

排查与解决步骤

  1. 优化容器启动依赖逻辑

    • 给MongoDB容器添加健康检查,确保服务就绪后再启动Express:
      修改docker-compose.yml中mongodb服务配置:
      mongodb:
        image: docker.io/bitnami/mongodb:7.0
        environment:
          - ALLOW_EMPTY_PASSWORD=yes
        healthcheck:
          test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
          interval: 5s
          timeout: 5s
          retries: 5
      
      同时修改express的depends_on规则:
      express:
        # ...其他配置
        depends_on:
          mongodb:
            condition: service_healthy
      
    • 延长Express等待数据库的超时时间,添加环境变量EXPRESS_DB_WAIT_TIMEOUT=60(单位秒)
  2. 验证MongoDB服务状态

    • 进入MongoDB容器执行mongosh --eval "db.adminCommand('ping')",确认服务是否正常响应
    • 进入Express容器执行nc -zv mongodb 27017,测试端口连通性
  3. 调整连接字符串参数

    • 给连接字符串添加超时与重试参数:mongodb://mongodb:27017/myapp?connectTimeoutMS=30000&retryWrites=true
    • 尝试追加认证源参数:&authSource=admin
  4. 查看Express容器详细日志

    • 执行docker logs -f express-1,获取更具体的连接错误信息(如DNS解析、认证失败等)
  5. 简化MongoDB初始化流程

    • Bitnami MongoDB容器创建用户后会重启服务,可提前用初始化脚本创建用户,或使用已初始化完成的镜像,避免启动过程中的端口中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:47:15