Я написал сервер NodeJS, который пытаюсь запустить в контейнере Docker на основе node-alpine.
как Лучшие практики Docker Node я использую пользователя узла.
В настоящее время я использую порт 9999, и он работает нормально.
Вместо этого я хотел бы открыть порт 80 и 443, но не могу заставить его работать.
Быстрое решение - просто использовать вместо этого пользователя root, но это похоже на хакерское решение.
Главный вопрос:
Это также вызывает некоторые дополнительные вопросы:
Как бы то ни было, это мой Dockerfile:
FROM node:10-alpine
ENV NODE_ENV production
WORKDIR /app
COPY api api
COPY packages/utils packages/utils
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN npm uninstall --global npm \
&& apk add build-base python2 --no-cache \
&& yarn --frozen-lockfile --production \
&& rm -r /opt/yarn* yarn.lock
USER node
ENTRYPOINT ["node", "-r", "esm", "api/server.js"]
EXPOSE 9999
... но когда вы запускаете образ, вы можете выбрать для использования произвольный порт на хосте; например, docker run -p 80:9999 опубликует порт на обычном HTTP-порту 80 на хосте.
Я знаю, что могу сопоставить открытый порт с любым произвольным портом на хосте или с помощью nginx. Я просто подумал, что имеет смысл выставить HTTP-сервер на порт по умолчанию в контейнере. Судя по комментариям, я ошибался.





Вы не можете запустить приложение узла на порту ниже 1024 без прав суперпользователя. Также запуск узла как root - плохая идея. Вам следует использовать обратный прокси, например nginx.