ОБНОВЛЕНО
После обсуждения в чате выяснилось, что с контейнером приложения nodejs проблем нет, и проблема связана с неправильно настроенным прокси nginx.
Доказательством работоспособности приложения nodejs является следующий файл docker -compose.
version: "3"
services:
api:
build: .
curl:
image: curlimages/curl:7.70.0
depends_on:
- api
entrypoint: ""
command: curl -si --retry 5 --retry-delay 5 --retry-max-time 40 http://api:6000
restart: on-failure
ORIGINAL
Если вы хотите изменить порт во время процесса сборки (он будет stati c позже, когда вы запустите контейнер), затем используйте build-args
docker build --build-arg APP_PORT=3000
FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ARG APP_PORT=80
EXPOSE ${APP_PORT}
COPY . .
RUN APP_PORT=${APP_PORT} npm install
CMD APP_PORT=${APP_PORT} npm run start
, если вы хотите иметь возможность изменить порт, когда вы ' повторный запуск контейнера - тогда build-args не подходят и вам нужно оставить env
переменных. Обратите внимание, что после сборки EXPOSE
не может быть изменено.
В любом случае, если у вас есть разные порты в EXPOSE
и ваше приложение слушает - оно ничего не ломает, порт приложения будет доступен на порт, который вы хотите, несмотря на то, что он не был указан в EXPOSE
.
Вы даже можете пропустить EXPOSE
в своем файле, потому что это скорее метаданные вашего изображения, чем инструкция для открытия системы порт: https://docs.docker.com/engine/reference/builder/#expose
Независимо от настроек EXPOSE, вы можете переопределить их во время выполнения, используя флаг -p.
if ваше изображение - stati c после сборки (вы не планируете менять .env), вы можете сделать дальше, тогда npm install
и npm run start
будут иметь тот же env. И вам все еще разрешено изменить порт позже, но это не повлияет на npm install.
FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
RUN export $(cat .env) && npm install
CMD export $(cat .env) && npm run start
, если вам нужно сохранить CMD
как массив - тогда нам нужно создать bootstrap сценарий
FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
RUN export $(cat .env) && npm install
RUN echo '#!/usr/bin/env sh' > start.sh && echo 'export $(cat .env) && npm run start ${@}' >> start.sh
CMD ["sh", "./start.sh"]