2016-12-10 20 views
3

私はNode.jsとDockerを同時に学習しようとしています。私はポートでリッスンして文字列を返す非常に単純なNode.jsアプリケーションを持っています。ローカルで実行しているときは、Nodeアプリケーション自体が正常に動作します。私は今Dockerコンテナで動作させようとしていますが、私はそれを手に入れることはできません。単純なDocker Node.js Webアプリケーションと通信できません

const http = require('http'); 

const hostname = '127.0.0.1'; 
const port = 3000; 

var count = 0; 

var server = http.createServer(function(req, res) { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.end("Here's the current value: " + count); 
    console.log('Got a request: ', req.url); 
    count++; 
}); 

server.listen(port, hostname,() => { 
    console.log(`Server running at http://${hostname}:${port}/`); 
}); 

マイDockerfile:

は、ここに私のノードアプリです

FROM node:latest 

MAINTAINER Jason 

ENV PORT=3000 

COPY . /var/www 
WORKDIR /var/www 

EXPOSE $PORT 

ENTRYPOINT ["node", "app.js"] 

私のビルドコマンド:

docker build -t jason/node . 

そして、私のrunコマンド:

docker run -p 3000:3000 jason/node 

app.jsファイルとDockerfileは、コマンドを実行しているディレクトリと同じディレクトリにあります。ドッカーのPSを実行すると、アプリケーションが実行中であることがわかりますが、ブラウザで127.0.0.1:3000にナビゲートすると、サイトにエラーが発生することはありません。また、app.jsがイメージに正しく追加されていることを確認しました。実行後に「http://127.0.0.1:3000/で実行中のサーバー」というメッセージが表示されます。

私は何か本当にシンプルな何かが欠けていると思いますか?

+0

'hostname'を省略するか、listen関数に '0.0.0.0'を使用してください。それを 'server.listen(port、 '0.0.0.0'、()=> { console.log(' http:// $ {hostname}:$ {port}/'); }で実行しているサーバ)にします。 ' – Yuva

+0

それは、ありがとうゆうバでした!答えを作成し、それを選択します。 – Jason

答えて

2

省略hostnameまたは使用「0.0.0.0」を発行して参照してください。作ってくださいserver.listen(port, '0.0.0.0',() => { console.log(Server running..); });

2

Windows 7/8でドッカーを使用している場合は、おそらくドッキングマシンが動作している可能性があります。192.168.99.100などのドッカーマシンにアクセスする必要があります。

あなたがドッキングウィンドウマシンを実行している場合だけ機能を聞く上でコマンド

docker-machine ls 
+0

Windows 10の場合、ドッカーマシンは表示されません。問題は上記のコメントでYuvaが言及したとおりでした。 Sergiuに感謝します。 – Jason

+0

嬉しいです:) np –

関連する問題