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

问题描述 投票:2回答:2
  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}/`);
});
node.js docker
2个回答
0
投票
  1. 您是否在docker run命令中发布了端口?
docker run -p 80:3000 ...
  1. 如果你在没有docker的情况下运行它的主机名是localhost(127.0.0.1)但是如果你在docker中运行它必须是:
const hostname = '0.0.0.0';

0
投票

在您的代码中,服务器侦听PORT 3000并且您已将PORT 80暴露给HOST,这意味着PORT 80在docker容器内没有任何对应的运行,您实际上必须从docker容器EXPOSE PORT 3000并使用它。

您可以使用此命令映射到主机中可用的端口,其中:之前的端口号:表示在主机和端口号中公开的端口:代表在公开的AFAIK的docker容器中的端口。

docker run -p 80:80
© www.soinside.com 2019 - 2024. All rights reserved.