我们可以在docker的nodejs中使用http包吗

时间:2019-03-27 08:56:45

标签: node.js docker

  1. 我正在研究docker,并用docker编写了一个演示nodejs。我在nodejs中使用HTTP包而不是express,该应用程序是使用docker构建的,但是当我进入localhost:80时,返回值为

      

    ERR_EMPTY_RESPONSE

    我有一个使用nodejs演示的代码,并使用express,它可以运行,并且我找不到使用HTTP包的任何示例。

  2. 我不清楚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}/`);
});

2 个答案:

答案 0 :(得分:0)

  1. 您是否已在docker run命令中发布了端口?
docker run -p 80:3000 ...
  1. 如果在没有docker的情况下运行它,您的主机名是localhost(127.0.0.1) 但是,如果您在docker中运行它,则必须是:
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