Можем ли мы использовать пакет http в nodejs с докером - PullRequest
2 голосов
/ 27 марта 2019
  1. Я исследую Docker, и у меня есть код демо nodejs с Docker.Я использую HTTP-пакет в nodejs вместо express, приложение создается с помощью docker, но когда я перехожу к localhost: 80, возвращаемое значение равно

    ERR_EMPTY_RESPONSE

    У меня естьзакодировать демо с помощью nodejs и использовать express, он может работать, и я не могу найти ни одного примера с использованием пакета HTTP.

  2. Я не понимаю, для чего нужен порт EXPOSE в docker, то есть вызов портав браузер или порт для приложения?

Файл 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 голосов
/ 27 марта 2019

В вашем коде сервер прослушивает ПОРТ 3000, и вы выставили ПОРТ 80 на ХОСТ, что означает, что ПОРТ 80 не имеет ничего общего с работой в док-контейнере, вам на самом деле нужно ПОЛУЧИТЬ ПОРТ 3000 из док-контейнера и использовать его.

Вы можете использовать эту команду для сопоставления с портом, используемым на хосте, где номер порта до: представляет порт, который должен быть отображен на хосте, и номер порта после: представляет порт в контейнере докера, который открыт AFAIK.

docker run -p 80:80
0 голосов
/ 27 марта 2019
  1. Вы опубликовали порт в команде запуска Docker?
docker run -p 80:3000 ...
Ваше имя хоста, если вы запускаете его без докера, является localhost (127.0.0.1), но если вы запускаете его в докере, оно должно быть:
const hostname = '0.0.0.0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...