我在OS X上运行Docker:
docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod
并使用ip来自:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid>
在:
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var url = 'mongodb://<ip>:27017';
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
db.close();
});
我得到了一个超时错误。
我正在使用Docker Hub的官方mongo存储库。为了从主机连接,我需要做任何其他设置吗?
答案 0 :(得分:30)
node.js代码是从容器还是从主机运行?
如果它在主机上,只需使用本地主机地址,即:
var url = 'mongodb://localhost:27017';
这样做是因为您使用-p 27017:27017
发布了端口。
如果代码在容器内运行,最好将其重写为使用链接并按名称引用mongo容器,例如:
var url = 'mongodb://mongo:27017';
然后,当您使用Node.js代码启动容器时,您可以执行以下操作:
docker run -d --link mongo:mongo my_container
Docker将在容器内向/etc/hosts
添加一个条目,以便名称mongo
解析为mongo容器的IP。
答案 1 :(得分:1)
如果您使用用户定义的网络,您应该能够在不链接或指定27017
的情况下进行选择const MONGO_NAME_STR = "mongodb://" + "your_docker_container_name";
var db = {};
mongo_client.connect(MONGO_NAME_STR, function(err, _db){
//some err handling
db = _db;
});
答案 2 :(得分:0)
使用docker-compose的任何人的另一个选择
version: '3.1'
services:
mongo:
image: mongo
container_name: "mongo"
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- './dockervolume/mongodb:/data/db'
ports:
- 27017:27017
您可以使用网址字符串进行连接
MongoClient.connect("mongodb://root:example@localhost:27017")
.then(()=>{
console.log("db connect success");
})
.catch((err)=>{
throw err
});