web-dev-qa-db-ja.com

他のコンテナからのDocker mongoイメージ「接続拒否」

ドッカーは初めてです。 MongoDBコンテナーとNodeJSコンテナーを作成しようとしています。私のファイルの外観:

version: '2'
services:
  backend:
    image: node:5.11-onbuild
    ports:
     - "3001:3001"
    volumes:
     - .:/code
    working_dir: "/code"
    links:
     - mongodb
  mongodb:
    image: mongo:3.3
    expose:
     - 27017

npm installを実行してからnode .を実行する必要があります。ただし、docker-compose up[MongoError: connect ECONNREFUSED 127.0.0.1:27017]になり、コマンドはnode .になります。これはファイルbind_ip = 127.0.0.1/etc/mongod.confによるものだと思います。これは正しいですか?

Win10システムでboot2dockerを使用しています。

ノードがMongoDBに接続できるようにこの問題を解決するにはどうすればよいですか?

15
Piu130

バックエンドアプリで、mongodb:27017 の代わりに 127.0.0.1:27017。ここで、「mongodb」は、docker-compose.yml内のコンテナーの名前です。

47
Thomasleveil

私は最近、同様の問題に遭遇しました。私は勝利10の下でドッカーツールボックスを実行していますが、これは私のためにどのように働いたかです:

1)デフォルトのdockerマシンが使用しているURLを確認する必要がありました。これは、docker-machine lsコマンドを実行することで確認できます。利用可能なマシンがリストされます:

NAME             ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default          *        virtualbox   Running   tcp://192.168.99.100:1234           v17.06.0-ce
rancher-client   -        virtualbox   Stopped                                       Unknown
rancher-server   -        virtualbox   Stopped                                       Unknown

2)mongodbイメージを実行する場合、ポートマッピングを指定します

docker run -d -it -p 27017:27017 mongo

3)その時点で、有効なmongo urlは次のようになります

var dbhost = 'mongodb://192.168.99.100:27017/test

ここで、192.168.99.100はポイント1からのデフォルトのマシンURLです

それが誰かを助けることを願っています。

7
Marcin

Localhostの代わりに独自のIPアドレスを使用するようにコンテナに指示する必要があります。

たとえば、expressjsを使用してscaffoldコードを生成したと仮定し、routes/index.jsで記述する必要があります

var mongodb = require('mongodb');
router.get('/thelist', function(req, res){

  // Get a Mongo client to work with the Mongo server
  var MongoClient = mongodb.MongoClient;

  // Define where the MongoDB server is
  var url = 'mongodb://172.17.0.5:27017/dbname';

  // Connect to the server
  MongoClient.connect(url, function (err, db) {
  .........

ここで、172.17.0.5$CONTAINER_IPです

$ docker inspect $CONTAINER_HOSTNAME | grep IPAddressでコンテナIPを見つけることができます

それでも理解できない場合は、私の Docker NodeJSとMongoDBアプリ を覗いてみてください。

おそらく、はい。 127.0.0.1はlocalhost inside mongodbコンテナーを指しているため、コンテナーの外部からアクセスできません。 0.0.0.0へのバインドはおそらく機能します。

Docker-compose.ymlで指定したリンクを使用すると、バックエンドコンテナーはmongodb:27017を介してmongoコンテナーに接続できるはずです。

5
thaJeztah