Порт прослушивания для развертывания, nodejs docker - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть простое приложение node.js - express, и я устанавливаю порт прослушивания на 3000. В моем Dockerfile я открываю порт 3000 и запускаю контейнер, используя -p 3000:3000.

Я хочу развернуть мое приложение на Heroku использует мое изображение docker, как это правильно сделать?

Я знаю, что в этих случаях мы используем process.env или указываем глобальную переменную в файле .env.

Я перечисляю под своим Dockerfile.

FROM node:10-alpine as builder

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

RUN apk --no-cache add python make g++

COPY package*.json ./

RUN npm install --only=production
# RUN npm ci --only=production

FROM node:10-alpine

WORKDIR /usr/src/app

COPY --from=builder node_modules node_modules

COPY . .

EXPOSE 3000

CMD [ "npm", "run", "start:prod" ]

Как правильно подходить к проблеме? Кроме того, любые предложения по улучшению моего Dockerfile приветствуются.

1 Ответ

0 голосов
/ 25 февраля 2020

При развертывании веб-приложения на Heroku они сообщат вам, какой порт свободен, через переменную env. Вы должны связать этот порт в вашем исходном коде.
В вашем Dockerfile удалите EXPOSE 3000, так как вы не можете открыть пользовательский порт.

В вашем исходном коде вы должны будете написать что-то вроде const port = process.env.PORT || 3000.
Так что, когда вы выполняете свою программу локально, и у вас не установлен env var $PORT, он откроет порт 3000. В Heroku он откроет порт для того, что указано в $PORT.


Обычное препятствие при развертывании в Heroku состоит в том, что ваши URL-адреса больше не работают. При локальном запуске у вас может быть URL: http://localhost:3000/, но в Heroku у вас есть: https://my-app.herokuapp.com/.
http s может вызвать головную боль, так как вы, возможно, работали с http все время , Кроме того, если вы жестко закодировали порт в конце имени хоста, это вызовет некоторые проблемы. Heroku автоматически переводит имя хоста в ip-адрес + порт.


Вы можете прочитать здесь о развертывании на Docker здесь:
https://devcenter.heroku.com/categories/deploying-with-docker
https://devcenter.heroku.com/articles/build-docker-images-heroku-yml

Убедившись, что ваш код совместим с Heroku, вы можете приступить к развертыванию Heroku Docker. Статья очень тщательная, и я считаю, что лучше, если вы прочитаете их, чем я, просто скопируйте и вставьте то, что там написано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...