执行 npm 运行 构建命令后反应应用 docker 容器 exits/restarts

React app docker container exits/restarts after executing npm run build command

Docker 文件:

FROM node:14

WORKDIR /code 

COPY ./code/package.json ./code/package-lock.json /code/

RUN npm install 

COPY ./code /code

CMD [ "npm", "run", "build"]

docker-compose.yml:

version: '3'

services:
  medace-lecture-capsules:
    build: ./app
    container_name: medace-lecture-capsules
    restart: always
    expose:
      - "3000"
    networks:
      - shared

networks:
  shared:
    external:
      name: shared

docker-撰写日志:

Attaching to medace-lecture-capsules
medace-lecture-capsules    | 
medace-lecture-capsules    | > medace-frontend-lecture-capsules@0.1.0 build /code
medace-lecture-capsules    | > react-scripts build
medace-lecture-capsules    | 
medace-lecture-capsules    | Creating an optimized production build...
medace-lecture-capsules    | Compiled successfully.
medace-lecture-capsules    |   
medace-lecture-capsules    | File sizes after gzip:
medace-lecture-capsules    | 
medace-lecture-capsules    |   130.34 KB  build/static/js/2.dd4b4a7b.chunk.js
medace-lecture-capsules    |   3.83 KB    build/static/js/main.725c12bb.chunk.js
medace-lecture-capsules    |   970 B      build/static/css/main.aae65096.chunk.css
medace-lecture-capsules    |   791 B      build/static/js/runtime-main.15e7259b.js
medace-lecture-capsules    | 
medace-lecture-capsules    | The project was built assuming it is hosted at /.
medace-lecture-capsules    | You can control this with the homepage field in your package.json.
medace-lecture-capsules    | 
medace-lecture-capsules    | The build folder is ready to be deployed.
medace-lecture-capsules    | You may serve it with a static server:
medace-lecture-capsules    | 
medace-lecture-capsules    |   npm install -g serve
medace-lecture-capsules    |   serve -s build
medace-lecture-capsules    | 
medace-lecture-capsules    | Find out more about deployment here:
medace-lecture-capsules    | 
medace-lecture-capsules    |   https://cra.link/deployment
medace-lecture-capsules    |  

我使用了 docker-compose 构建,然后是 docker-compose up -d,但是容器在创建构建后以某种方式设法退出。我想要 运行 一个生产服务器,这就是我使用 npm 运行 build 的原因。 尝试了 serve -s build 但加载网页时出现 404 错误。

你的命令好像是你的编译命令

容器的 CMD 命令需要 运行 永远像

CMD node app.js

或者也许 命令 npm 开始

还有一些与您的问题无关的问题,如果您使用 npm install 我认为您的锁定文件将被忽略并重新生成。要准确安装锁定文件中的内容,请使用

RUN npm ci

抱歉 - 告诉您为什么它在我的 phone 上不起作用比告诉您如何让它起作用更容易

FROM node:14
WORKDIR /code 
COPY ./code/package.json ./code/package-lock.json /code/
RUN npm ci # install what is in lock file no package file 
COPY ./code /code
RUN npm run build
RUN npm install -g serve
CMD serve -s build 3000

然后如果你想尝试本地服务,你可以在你的项目中添加npm install serve并保存包和包锁定文件,然后你就不必在全局安装serve在你的容器中,它变成:

FROM node:14
WORKDIR /code 
COPY ./code/package.json ./code/package-lock.json /code/
RUN npm ci # install what is in lock file no package file 
COPY ./code /code
RUN npm run build
# the port for the following should match the one you are exposing with docker compose:
CMD ./node_modules/.bin/serve -s build 3000

将依赖项 serve 添加到项目后