我正在研究docker,并用docker编写了一个演示nodejs。我在nodejs中使用HTTP包而不是express,该应用程序是使用docker构建的,但是当我进入localhost:80时,返回值为
ERR_EMPTY_RESPONSE
我有一个使用nodejs演示的代码,并使用express,它可以运行,并且我找不到使用HTTP包的任何示例。
我不清楚Docker中的EXPOSE端口是什么,即浏览器的端口调用或应用程序的端口?
Docker文件
FROM node:8
RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json ./
USER node
RUN npm install
COPY --chown=node:node . .
EXPOSE 80
CMD ["npm", "start"]
index.js
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end("Hello world \n");
});
server.listen(port, hostname, () => {
console.log(`server is running at abcxyz http://${hostname}:${port}/`);
});
答案 0 :(得分:0)
docker run -p 80:3000 ...
const hostname = '0.0.0.0';
答案 1 :(得分:0)
在您的代码中,服务器侦听PORT 3000,并且已将PORT 80暴露给HOST,这意味着PORT 80在docker容器中没有任何对应的运行,实际上您必须从docker容器中暴露PORT 3000并使用它。
您可以使用此命令映射到主机中可用的端口,其中:之前的端口号表示要在主机中公开的端口,而之后的端口号:表示暴露于AFAIK的Docker容器中的端口。
docker run -p 80:80