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

Docker Compose无法启动全部服务:仅Mongo容器自动启动求助

问题:Mongo-Express容器自动启动失败,手动启动正常

我的Docker Compose配置包含mongodb和mongo-express两个服务,执行启动命令后只有mongo容器能正常创建并运行,手动启动mongo-express容器却可以正常工作。以下是我的配置文件和mongo-express的日志信息,请问哪里配置错了?

我的Docker Compose配置

version: '3'
services:
  mongodb:
    container_name: mongo
    image: mongo:4.4.15
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=password

  mongo-express:
    container_name: mongo-express
    image: mongo-express
    ports:
      - "8081:8081"
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
      - ME_CONFIG_MONGODB_ADMINPASSWORD=password
      - ME_CONFIG_MONGODB_SERVER=mongodb

Mongo-Express日志(翻译后)

mongo-express    | 欢迎使用mongo-express
mongo-express    | ------------------------
mongo-express    |
mongo-express    |
mongo-express    | (node:7) [MONGODB DRIVER] 警告:当前的服务器发现和监控引擎已过时,将在未来版本中移除。要使用新的服务器发现和监控引擎,请将选项 { useUnifiedTopology: true } 传递给MongoClient构造函数。
mongo-express    | 无法使用连接字符串连接到数据库:mongodb://admin:password@mongodb:27017/"
mongo-express    | (node:7) UnhandledPromiseRejectionWarning: MongoNetworkError: 首次连接时无法连接到服务器 [mongodb:27017] [Error: connect ECONNREFUSED 172.20.0.3:27017
mongo-express    |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1144:16) {
mongo-express    |   name: 'MongoNetworkError'
mongo-express    | }]
mongo-express    |     at Pool.<anonymous> (/node_modules/mongodb/lib/core/topologies/server.js:441:11)
mongo-express    |     at Pool.emit (events.js:314:20)
mongo-express    |     at /node_modules/mongodb/lib/core/connection/pool.js:564:14
mongo-express    |     at /node_modules/mongodb/lib/core/connection/pool.js:1000:11
mongo-express    |     at /node_modules/mongodb/lib/core/connection/connect.js:32:7
mongo-express    |     at callback (/node_modules/mongodb/lib/core/connection/connect.js:300:5)
mongo-express    |     at Socket.<anonymous> (/node_modules/mongodb/lib/core/connection/connect.js:330:7)
mongo-express    |     at Object.onceWrapper (events.js:421:26)
mongo-express    |     at Socket.emit (events.js:314:20)
mongo-express    |     at emitErrorNT (internal/streams/destroy.js:92:8)
mongo-express    |     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
mongo-express    |     at processTicksAndRejections (internal/process/task_queues.js:84:21)
mongo-express    | (node:7) UnhandledPromiseRejectionWarning: 未处理的Promise拒绝。此错误要么是因为在async函数中抛出异常但没有catch块,要么是因为拒绝了一个未用.catch()处理的Promise。要在未处理的Promise拒绝时终止节点进程,请使用CLI标志 `--unhandled-rejections=strict`。(拒绝id: 1)
mongo-express    | (node:7) [DEP0018] 弃用警告:未处理的Promise拒绝已被弃用。未来,未处理的Promise拒绝将终止Node.js进程,并带有非零退出代码。

问题原因及修复方案

原因

mongo-express启动速度比mongodb快,当它尝试连接数据库时,mongodb还没完成初始化(包括创建管理员用户的步骤),导致连接被拒绝,容器直接启动失败。而手动启动时,mongodb已经完全就绪,所以能正常连接。

修复方案

给mongo-express添加依赖规则和健康检查配置,确保它在mongodb完全就绪后再启动。修改后的Docker Compose配置如下:

version: '3'
services:
  mongodb:
    container_name: mongo
    image: mongo:4.4.15
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=password
    # 配置健康检查,确认mongodb就绪
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')", "--username", "admin", "--password", "password", "--authenticationDatabase", "admin"]
      interval: 5s
      timeout: 5s
      retries: 5

  mongo-express:
    container_name: mongo-express
    image: mongo-express
    ports:
      - "8081:8081"
    environment:
      - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
      - ME_CONFIG_MONGODB_ADMINPASSWORD=password
      - ME_CONFIG_MONGODB_SERVER=mongodb
    # 等待mongodb健康检查通过后再启动
    depends_on:
      mongodb:
        condition: service_healthy
    # 自动重启,防止偶尔连接失败导致容器退出
    restart: unless-stopped

配置说明

  • healthcheck:通过mongo ping命令检测mongodb是否能正常接受连接,确保初始化完成(包括管理员用户创建)。
  • depends_on + service_healthy:让mongo-express等待mongodb的健康检查通过后再启动,避免提前连接导致失败。
  • restart: unless-stopped:即使偶尔出现连接问题,容器也会自动重启,直到成功连接到数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:45:28