2015-10-26 36 views
9

Tôi đang chạy Docker trên OS X với:Đang kết nối đến Mongo chứa Docker từ máy chủ

docker run --name mongo -p 27017:27017 -v ./data/db:/data/db -d mongo mongod 

và sử dụng ip tôi nhận được từ:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <cid> 

trong:

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(); 
}); 

và tôi nhận được lỗi hết thời gian chờ.

Tôi đang sử dụng kho lưu trữ mongo chính thức từ Docker Hub. Có thiết lập bổ sung nào mà tôi cần thực hiện để kết nối từ máy chủ không?

Trả lời

20

Mã node.js có đang được chạy từ một vùng chứa hay từ máy chủ không?

Nếu đó là trên máy chủ, chỉ cần sử dụng tức là địa chỉ localhost:

var url = 'mongodb://localhost:27017'; 

này sẽ làm việc bởi vì bạn đã công bố cảng với -p 27017:27017.

Nếu mã đang chạy bên trong một container, nó sẽ là tốt nhất để viết lại nó để sử dụng các liên kết và đề cập đến container Mongo theo tên ví dụ:

var url = 'mongodb://mongo:27017'; 

Sau đó, khi bạn khởi động container với Node. mã js, bạn chỉ có thể làm điều gì đó như:

docker run -d --link mongo:mongo my_container 

Docker sau đó sẽ thêm một mục vào /etc/hosts bên trong chứa để tên mongo giải quyết để IP của container Mongo.

+0

Tôi đang chạy nó từ máy chủ. Tôi nhận được một kết nối từ chối khi tôi thay đổi nó thành localhost. – ggeise

+0

Bạn có chắc chắn rằng thùng chứa mongo vẫn đang chạy? Có một cái nhìn trong 'docker ps'. Tôi vừa thử nghiệm và nó bị treo ngay lập tức với một lỗi nhật ký cho tôi - tôi phải chuyển đối số '--smallfiles' để bắt đầu. –

+0

Đúng, điều đó đang ở lại cho tôi. Tôi đã thử đặt chương trình của tôi bên trong một thùng chứa và nó kết nối tốt với cú pháp liên kết. – ggeise

0

Nếu bạn sử dụng một người sử dụng mạng được xác định bạn sẽ có thể nhặt nó lên mà không liên kết hoặc xác định 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; 
}); 
Các vấn đề liên quan