我只是想同时学习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/"跑完之后。
我想我错过了一些非常简单的想法?
答案 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