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は、名前mongo
がmongoコンテナーのIPに解決されるように、コンテナー内の/etc/hosts
にエントリーを追加します。
ユーザー定義のネットワークを使用している場合、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;
});
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
そして、あなたはURL文字列を使用して接続することができます
MongoClient.connect("mongodb://root:example@localhost:27017")
.then(()=>{
console.log("db connect success");
})
.catch((err)=>{
throw err
});