web-dev-qa-db-ja.com

ホストからmongo docker containerへの接続

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リポジトリを使用しています。ホストから接続するために必要な追加のセットアップはありますか?

19
ggeise

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にエントリーを追加します。

31
Adrian Mouat

ユーザー定義のネットワークを使用している場合、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;
});
1
fullstacklife

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

1
roll