我在 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 存储库。为了从主机连接,我需要做任何其他设置吗?
最佳答案
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。
关于node.js - 从主机连接到 mongo docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336773/