2016-09-30 17 views
0

私は接続したい2つのNodeJSコンテナを持っています。Dockerで実行中の別のNodeAppにnodeAppを接続するにはどうすればいいですか?

JSONファイルを返すAPIとして最初の作品、

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 

// Form data 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})) 

// set port port=4444 node app.js 
var port = process.env.PORT || 3001; 

//ROUTES FOR API 
//get the router instance from express 
var router = express.Router(); 

//test route on accessed at GET http://localhost:8080/api 
router.get('/', function(req, res) { 
    res.json({message:'hello Welcome to our api'}); 
}); 

//all of our routes will be prfixed with /api 
app.use('/api', router); 

// server start 
app.listen(port); 
console.log('The server is running on localhost:' + port); 

と第二(私のwebサービス)以降のGET POSTメソッドを作るために、このAPIへのリクエストを行います。

var http = require("http"); 
var request = require('request'); 
var express = require('express'); 
var app = express(); 



    request({ url: "nodeapi:/loving_mccarthy:3001/api", 
        method: "GET", 
        headers: { "Content-Type": "application/json" }, 
        json: true, 

       }, function (error, response, body) { 
        if(error) { 
        console.log(error); 
        } else { 
        console.log(response.statusCode); 
        console.log('the api contents: \n' + body.message); 
        } 
        }); 

すでに第2のコンテナが第1のコンテナに接続されています(docker run -d --link nodeapi:nodeapi -v /vagrant_workspace/nodejs_test/src:/usr/src/app/src eddy/node_test:v3)。

しかし、私はどのように2番目のコードを書くことができないので、最初のコンテナからのurlと引数が2番目のコンテナから呼び出されるようにします。

答えて

0

Links are a legacy feature - これを行うには、好ましい方法はDocker networksです。

あなたが最初のネットワークを作成し、あなたが同じネットワーク内のコンテナを実行すると、彼らは、コンテナの名前を使用して、DNSによってお互いにアクセスできます。ping

> docker network create my-app 
aeb906ae13daf10331fefa026621fd11d9e6a8112757308cda82ad969a1cea6b  

> docker run -d --name api --network my-app nginx:alpine 
68ed7384891fcc6563d6dfe740fb2f09f058b308c333c73b47f511b2fed5cf6f 

> docker run -d --name web --network my-app nginx:alpine 
eecbefd788383553d4fb1429ef207b5b83d57165ce39db0d100da318dadef541 

簡単な例:

> docker exec web ping -c 1 api 
PING api (172.19.0.2): 56 data bytes 
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.091 ms                           

> docker exec api ping -c 1 web 
PING web (172.19.0.3): 56 data bytes 
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.107 ms 

あなたのコードでは、DNS名(web、api、dbなど)でサービスを参照し、Dockerがその発見に対応するようにします。

$ docker network 
docker: 'network' is not a docker command. See 'docker --help'. 

しかし、私はあまりにもnodeapiコンテナフォームにpingを実行することができます:私は、ドッキングウィンドウのネットワークで動作するようにしようとすると

0

HIエルトンと最初は、 回答をありがとうございましたけれども、私がこれをなっworkinkされていませんウェブ:

request({ url: "nodeapi:/<web_container_name>:3001/api", 
        method: "GET", 
        headers: { "Content-Type": "application/json" }, 
        json: true, 

       }, function (error, response, body) { 
        if(error) { 
        console.log(error); 
        } else { 
        console.log(response.statusCode); 
        console.log('the api contents: \n' + body.message); 
        } 
        }); 

[email protected]:/usr/src/app/src# ping nodeapi 
PING nodeapi (172.17.0.1): 56 data bytes 
64 bytes from 172.17.0.1: icmp_seq=0 ttl=64 time=0.283 ms 

が、同様にウェブ内のノードAPIへのリクエストを行いますしようとした場合210

など:

request({ url: "http://172.17.0.1:3001/api", 
        method: "GET", 
        headers: { "Content-Type": "application/json" }, 
        json: true, 

       }, function (error, response, body) { 
        if(error) { 
        console.log(error); 
        } else { 
        console.log(response.statusCode); 
        console.log('the api contents: \n' + body.message); 
        } 
        }); 

リクエストは機能しません。

ハイアーあなたは何 `ドッキングウィンドウのVERSION`を実行しているコンテナENV

[email protected]:/usr/src/app/src# env | grep NODEAPI 
NODEAPI_PORT_3001_TCP_ADDR=172.17.0.1 
NODEAPI_ENV_http_proxy=http://10.0.2.2:3128 
NODEAPI_PORT_3001_TCP_PORT=3001 
NODEAPI_PORT_3001_TCP_PROTO=tcp 
NODEAPI_PORT=tcp://172.17.0.1:3001 
NODEAPI_ENV_NPM_CONFIG_LOGLEVEL=info 
NODEAPI_NAME=/loving_carson/nodeapi 
NODEAPI_ENV_NODE_VERSION=4.5.0 
NODEAPI_ENV_https_proxy=http://10.0.2.2:3128 
NODEAPI_PORT_3001_TCP=tcp://172.17.0.1:3001 
[email protected]:/usr/src/app/src# 
+0

を見ることができますか? –

関連する問題