【问题标题】:docker-compose: MongoDB connection refuseddocker-compose:MongoDB 连接被拒绝
【发布时间】:2018-07-14 03:33:13
【问题描述】:

我是 Docker 新手,正在尝试在容器中设置现有项目。该项目是一个依赖于 MongoDB 的 Node 应用(通过 Keystone JS 运行)。

我的docker-compose.yml 文件包含:

version: "2"

services:

  mongodb:
    image: mongo
    volumes:
      - /data/db:/data/db
    ports:
      - "27017:27017"
    command: mongod --bind_ip_all

web:
  build: .
  ports:
    - "3000:3000"
  links:
    - mongodb
  environment:
    - MONGO_URL=mongodb://mongodb/site

应用程序尝试使用MONGO_URL 环境变量连接到数据库,但出现以下错误:

web_1      | Mongoose connection "error" event fired with:
web_1      | { MongoError: failed to connect to server [mongodb:27017] on first connect [MongoError: getaddrinfo ENOTFOUND mongodb mongodb:27017]
web_1      |     at Pool.<anonymous> (/opt/mainsite/node_modules/mongodb-core/lib/topologies/server.js:327:35)
web_1      |     at Pool.emit (events.js:160:13)
web_1      |     at Connection.<anonymous> (/opt/mainsite/node_modules/mongodb-core/lib/connection/pool.js:274:12)
web_1      |     at Object.onceWrapper (events.js:255:19)
web_1      |     at Connection.emit (events.js:160:13)
web_1      |     at Socket.<anonymous> (/opt/mainsite/node_modules/mongodb-core/lib/connection/connection.js:177:49)
web_1      |     at Object.onceWrapper (events.js:255:19)
web_1      |     at Socket.emit (events.js:160:13)
web_1      |     at emitErrorNT (internal/streams/destroy.js:64:8)
web_1      |     at process._tickCallback (internal/process/next_tick.js:152:19)
web_1      |   name: 'MongoError',
web_1      |   message: 'failed to connect to server [mongodb:27017] on first connect [MongoError: getaddrinfo ENOTFOUND mongodb mongodb:27017]' }
web_1      | Error: KeystoneJS (site) failed to start - Check that you are running `mongod` in a separate process.
web_1      |     at NativeConnection.<anonymous> (/opt/mainsite/node_modules/keystone/lib/core/openDatabaseConnection.js:59:10)
web_1      |     at NativeConnection.emit (events.js:160:13)
web_1      |     at Immediate.<anonymous> (/opt/mainsite/node_modules/keystone/node_modules/mongoose/lib/connection.js:317:19)
web_1      |     at runCallback (timers.js:756:18)
web_1      |     at tryOnImmediate (timers.js:717:5)
web_1      |     at processImmediate [as _immediateCallback] (timers.js:697:5)
web_1      | npm ERR! code ELIFECYCLE
web_1      | npm ERR! errno 1
web_1      | npm ERR! new_site@0.0.0 start: `node keystone`
web_1      | npm ERR! Exit status 1
web_1      | npm ERR! 
web_1      | npm ERR! Failed at the new_site@0.0.0 start script.
web_1      | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
web_1      | 
web_1      | npm ERR! A complete log of this run can be found in:
web_1      | npm ERR!     /root/.npm/_logs/2018-02-03T22_47_26_963Z-debug.log
new_web_1 exited with code 1

ENOTFOUND 返回使容器之间的网桥看起来有问题,但我在网上找到的任何东西都无法解决此问题。

【问题讨论】:

  • 对于 docker-compose mongo 服务已启动当它启动容器时,但在其中 mongodb 仍在启动(端口 27017 未可用,可能需要几秒钟)。我使用猫鼬(我的 ODM)连接重试修复了我的代码。我的修复在这里评论:github.com/docker/hub-feedback/issues/…

标签: node.js mongodb docker docker-compose


【解决方案1】:

以下是您可以执行的一些检查:

  • 主机名mongodb 是否可以从您运行应用程序的 docker 中解析?您可以使用telnet 进行验证
  • mongodb 是否在 mongodb docker 中运行?
  • mongodb是不是只能监听localhost接口?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2018-07-03
    • 2020-02-22
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2020-01-19
    相关资源
    最近更新 更多