pet*_*hel 9 mongodb node.js docker docker-compose
我没有经常使用docker和node,所以我希望它是一个简单的错误.我正在使用docker compose.如果我通过浏览器访问,
http://localhost:27017/我得到一个:
看起来您正在尝试通过本机驱动程序端口上的HTTP访问MongoDB.
还有日志表明我的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:没有日志文件,没有恢复需要2017-01-25T21:11:13.546 + 0000我的期刊[耐久性]耐久性线程开始2017-01-25T21:11:13.547 + 0000我期刊[期刊作者]期刊作者帖子开始2017-01-25T21:11:13.568 +0000 I CONTROL [initandlisten] MongoDB启动:pid = 1 port = 27017 dbpath =/data/db 64位主机= 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版本:6201872043ecbbc0a4cc169b5482dcf385fc464f 2017-01-25T21:11:13.569 + 0000 I CONTROL [initandlisten] OpenSSL版本:OpenSSL 1.0.1e 2013年2月11日2017-01-25T21 :11:13.569 + 0000 I CONTROL [initandlisten]构建信息: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:tcmal loc 2017-01-25T21:11:13.569 + 0000 I CONTROL [initandlisten]选项:{} 2017-01-25T21:11:13.573 + 0000 I NETWORK [initandlisten]等待端口27017上的连接2017-01-25T21:11 :17.843 + 0000我从172.20.0.1:44148#1接受网络[initandlisten]连接(1连接现已打开)2017-01-25T21:11:17.843 + 0000我从172.20.0.1:44146接受网络[initandlisten]连接# 2(2个连接现已打开)2017-01-25T21:11:17.853 + 0000 I NETWORK [conn2] end connection 172.20.0.1:44146(1个连接现已打开)2017-01-25T21:11:17.998 + 0000 I NETWORK [ conn1] end connection 172.20.0.1:44148(0个连接现已开启)
所以看起来我的mongodb正在运行.当我进入我的节点应用程序尝试访问它时,我得到了.
{MongoError:在第一次连接池时无法连接到服务器[localhost:27017].(/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:326:35)在Pool.emit(events.js:188:7)的emitOne(events.js:96:13)在Connection.(/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:270:12)在emitTwo的Object.onceWrapper(events.js:290:19)处(events.js:106:13)在Socket的Connection.emit(events.js:191:7).(/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:175:49)在emitOne上的Object.onceWrapper(events.js:290:19)处(events.js:96:13)名称:'MongoError',消息:'首次连接时无法连接到服务器[localhost:27017]'}
我的代码试图访问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);
Run Code Online (Sandbox Code Playgroud)
我的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"
Run Code Online (Sandbox Code Playgroud)
用于gh-api的Dockerfile
FROM node:7.4-onbuild
EXPOSE 8888
Run Code Online (Sandbox Code Playgroud)
Iva*_*vic 21
你能改变你的mongodb网址:
const url = 'mongodb://localhost:27017/myApp';
至
const url = 'mongodb://mongoDB/myApp';
我的演示博客应用程序遇到了类似的问题,并且该更改应用程序开始工作.
我能找到的最好的解释是docker-compose链接的解释.
链接服务的容器可以在与别名相同的主机名上访问,如果未指定别名,则可以访问服务名称.
因此,为了mongoDB从web容器访问容器,您应该mongoDB在web容器中使用主机名.
| 归档时间: |
|
| 查看次数: |
7421 次 |
| 最近记录: |