@historydev
Острая аллергия на анимешников

Как захостить статику из билда в контейнере?

Для запуска локально юзал эту команду, как и советуют после билда реакта: serve -s -l 3000

Dockerfile:
FROM node:18

WORKDIR /app

COPY package*.json ./

RUN npm install --legacy-peer-deps

COPY . .

RUN npm run build

EXPOSE 3000

CMD ["npm", "run", "production"] # здесь вызывается serve -s -l 3000


Проверки:
root@gitlab:/home/gitlab-user# docker exec -it 6b1f811288a3 bash
root@6b1f811288a3:/app# ps aux | grep node
root          19  0.1  0.5 11328196 71440 ?      Sl   18:49   0:00 node /app/node_modules/.bin/serve -s -l 3000
root          37  0.0  0.0   3324  1472 pts/0    S+   18:53   0:00 grep node
root@6b1f811288a3:/app# ls
Dockerfile  README.md  build  capacitor.config.ts  node_modules  package-lock.json  package.json  public  resources  src  tsconfig.json
root@6b1f811288a3:/app#


После запуска я получаю html страницу с папками проекта:

скрин
6599a2f1bea1a714305206.png


При попытке открыть build/index.html, там похоже эта самая страница, что-то я сделал не так, но не понимаю что.
  • Вопрос задан
  • 1293 просмотра
Решения вопроса 1
karabanov
@karabanov Куратор тега Docker
Системный администратор
Артефакт сборки надо поместить в /app

Тут не помешает двухстейджевая сборка, чтобы оптимизировать размер образа:

FROM node:18 as static-builder

WORKDIR /app

COPY package*.json ./

RUN npm install --legacy-peer-deps

COPY . .

RUN npm run build

# EXPOSE 3000 - эта директива оставлена для обратной совместимости и ни какие порты не открывает, можно её не использовать

FROM nginx

COPY --from=static-builder /app/publc /usr/shared/nginx/html
# или другой каталог, если артефакт сборки помещается не в /app/publc
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@wisead
После билда нужно все положить в /app
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы