Почему CMD ["npm", "start"] не работает в Dockerfile? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть Dockerfile, который включает в себя клиент (angular приложение), сервер и nginx. Angular stati c файлы обслуживаются с nginx. Сервер используется как API для запросов. Вот Dockerfile:

FROM node AS compile-image

WORKDIR /app

COPY package*.json ./

RUN npm install

WORKDIR /app/client

COPY ./client/package*.json ./

RUN npm install 
RUN npm build --prod

WORKDIR /app
COPY . .
ENV NODE_ENV=production

CMD ["npm", "start"]

FROM nginx:alpine
COPY /client/nginx.conf /etc/nginx/nginx.conf
RUN rm -rf /usr/share/nginx/html/*
COPY --from=compile-image app/client/dist /usr/share/nginx/html

Если я удаляю последние 4 строки, CMD ["npm", "start"] работает, когда я запускаю контейнер. Но с этими последними 4 строками этот CMD не запускает сервер (но nginx обслуживает stati c файлы front). Есть ли способы заставить этот CMD работать, не разбивая Dockerfile на 2-3 других Dockerfile?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

вы не хотите запускать образ, вы хотите запустить контейнер с nginx в качестве базового хоста. Попробуйте сделать это:

  1. Удалить эту строку CMD ["npm", "start"].
  2. docker build ..
  3. docker run -p "Port you want to use externally:Port in the default.conf file" -it docker_image_id
  4. Go на localhost: ПОРТ

Причина в том, что вы не хотите начинать первый шаг процесса сборки, скорее вы хотите создать docker, который создает экземпляр LB, и вы используете экземпляр nginx (LB) для запуска своего веб-сайта.

0 голосов
/ 15 апреля 2020

Попробуйте выполнить команду в форме оболочки.

CMD npm start

Я думаю, возможно, она интерпретирует "npm" и "start" как параметры.

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

Один контейнер вращает ваш сервер, а другой обслуживает ваши stati c файлы с nginx.

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

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