无法与简单的Docker Node.js Web应用程序通信

时间:2016-12-10 18:22:03

标签: node.js docker dockerfile

我只是想同时学习Node.js和Docker。我有一个非常简单的Node.js应用程序,它监听端口并返回一个字符串。 Node app本身在本地运行时运行正常。我现在正试图让它在Docker容器中运行,但我似乎无法达到它。

这是我的节点应用:

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 .

我的跑步命令:

docker run -p 3000:3000 jason/node

app.js文件和Dockerfile位于我运行命令的同一目录中。做一个docker ps显示应用程序正在运行,但是当我在浏览器中导航到127.0.0.1:3000时,我只是得到了一个无法访问的站点错误。我还确认app.js已正确添加到图像中,我收到消息"服务器正在http://127.0.0.1:3000/"跑完之后。

我想我错过了一些非常简单的想法?

2 个答案:

答案 0 :(得分:3)

忽略hostname或在listen函数上使用'0.0.0.0'。设为server.listen(port, '0.0.0.0', () => { console.log(Server running..); });

答案 1 :(得分:2)

如果你在Windows 7/8上使用docker,你很可能已经运行了一个docker-machine,那么你需要在192.168.99.100或者你的docker-machine所拥有的ip上访问它。

要查看您是否正在运行泊坞机,只需发出命令

docker-machine ls