ドッカーは初めてです。 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に接続できるようにこの問題を解決するにはどうすればよいですか?
バックエンドアプリで、mongodb:27017
の代わりに 127.0.0.1:27017
。ここで、「mongodb」は、docker-compose.yml内のコンテナーの名前です。
私は最近、同様の問題に遭遇しました。私は勝利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です
それが誰かを助けることを願っています。
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コンテナーに接続できるはずです。