node.js – 无法连接到docker mongodb

前端之家收集整理的这篇文章主要介绍了node.js – 无法连接到docker mongodb前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我没有经常使用docker和node,所以我希望它是一个简单的错误.我正在使用docker compose.如果我通过浏览器访问,
http:// localhost:27017 /我得到一个:

It looks like you are trying to access MongoDB over HTTP on the native
driver port.

还有日志表明我的mongodb是健康的.从我尝试通过浏览器访问的最后一行我想.

2017-01-25T21:11:13.509+0000 I JOURNAL [initandlisten] journal
dir=/data/db/journal 2017-01-25T21:11:13.509+0000 I JOURNAL
[initandlisten] recover : no journal files present,no recovery needed
2017-01-25T21:11:13.546+0000 I JOURNAL [durability] Durability thread
started 2017-01-25T21:11:13.547+0000 I JOURNAL [journal writer]
Journal writer thread started 2017-01-25T21:11:13.568+0000 I CONTROL
[initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db
64-bit host=150c248f4cc7 2017-01-25T21:11:13.568+0000 I CONTROL
[initandlisten] db version v3.0.2 2017-01-25T21:11:13.568+0000 I
CONTROL [initandlisten] git version:
6201872043ecbbc0a4cc169b5482dcf385fc464f 2017-01-25T21:11:13.569+0000
I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
2017-01-25T21:11:13.569+0000 I CONTROL [initandlisten] build info:
Linux ip-10-171-120-232 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64
BOOST_LIB_VERSION=1_49 2017-01-25T21:11:13.569+0000 I CONTROL
[initandlisten] allocator: tcmalloc 2017-01-25T21:11:13.569+0000 I
CONTROL [initandlisten] options: {} 2017-01-25T21:11:13.573+0000 I
NETWORK [initandlisten] waiting for connections on port 27017
2017-01-25T21:11:17.843+0000 I NETWORK [initandlisten] connection
accepted from 172.20.0.1:44148 #1 (1 connection now open)
2017-01-25T21:11:17.843+0000 I NETWORK [initandlisten] connection
accepted from 172.20.0.1:44146 #2 (2 connections now open)
2017-01-25T21:11:17.853+0000 I NETWORK [conn2] end connection
172.20.0.1:44146 (1 connection now open) 2017-01-25T21:11:17.998+0000 I NETWORK [conn1] end connection 172.20.0.1:44148 (0 connections now
open)

所以看起来我的mongodb正在运行.当我进入我的节点应用程序尝试访问它时,我得到了.

{ MongoError: Failed to connect to server [localhost:27017] on first
connect
at Pool. (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:326:35)
at emitOne (events.js:96:13)
at Pool.emit (events.js:188:7)
at Connection. (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:270:12)
at Object.onceWrapper (events.js:290:19)
at emitTwo (events.js:106:13)
at Connection.emit (events.js:191:7)
at Socket. (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:175:49)
at Object.onceWrapper (events.js:290:19)
at emitOne (events.js:96:13) name: ‘MongoError’,message: ‘Failed to connect to server [localhost:27017] on first connect’ }

我的代码试图访问mongodb

const express = require('express');
const gh = require('./src/fetch');
const MongoClient = require('mongodb').MongoClient;

const url = 'mongodb://localhost:27017/myApp';

// Constants
const PORT = 8888;

// App
const app = express();

app.get('/',function (req,res) {
    MongoClient.connect(url,function (err,db) {
        if (err) {
            console.log(err);
        } else {
            console.log("Connected correctly to server");
            db.close();
        }

    });
    res.send('Hello world\n');
});

app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

我的docker-compose看起来像这样.

version: '2'
services:
  web:
    image: gh-api
    ports:
      - "8888:8888"
    environment:
      - KEY=abc
    restart: always
    links:
      - mongoDB
    depends_on:
          - mongoDB
  mongoDB:
      image: mongo:3.0.2
      ports:
        - "27017:27017"

用于gh-api的Dockerfile

FROM node:7.4-onbuild

EXPOSE 8888
你能改变你的mongodb网址:

const url =’mongodb:// localhost:27017 / myApp’;

const url =’mongodb:// mongoDB / myApp’;

我有与my demo blog application类似的问题,并且该更改应用程序开始工作.

编辑

我能找到的最佳解释是explanation of docker-compose links.

Containers for the linked service will be reachable at a hostname
identical to the alias,or the service name if no alias was specified.

因此,为了从Web容器访问mongoDB容器,您应该在Web容器中使用mongoDB作为主机名.

猜你在找的Docker相关文章