生成反应应用程序的构建失败的 Dockerfile 副本

Dockerfile copy from build failing for create-react-app

我有一个 React 应用程序,我正在尝试 docker 用于生产。它基于 create-react-app。要在本地 运行 应用程序,我在应用程序的根文件夹中 运行 npm start。这行得通。我用 npm run build 构建了应用程序。然后我尝试用 docker build . -t app-name 创建 docker 图像。这是失败的,因为无法找到我试图从中复制构建的应用程序的文件夹(我认为)。

这是我的 Dockerfile 中的内容:

FROM node:13.12.0-alpine as build
WORKDIR /src
ENV PATH /node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
COPY . ./

RUN npm run build

FROM nginx:alpine
COPY --from=build build /usr/share/nginx/html
EXPOSE 80

CMD ["npm", "start"]

我很确定 COPY --from 行有问题。

app结构是这样的,如果有关系

-app-name (folder)
  -src (folder)
  -build (folder)
  -dockerfile
  -other stuff, but I think I listed what matters

我得到的错误是failed to compute cache key: "/build" not found: not found

我正在 运行在 windows powershell 中执行我的命令。

我需要改变什么?

你几乎是正确的, 只是生成build文件夹的路径在/src/build而不是/build。 因此你看到的错误, 为什么 /src 来了? 这是由于 WORKDIR /src.

因此这应该有效:COPY --from=build /src/build /usr/share/nginx/html

此外,由于您正在使用 nginx 服务器来提供构建静态文件, 你不需要或者你不能 运行 npm startCMD.

相反,只需保留它,您就可以在 80 端口访问该应用程序。

因此可能的工作 Dockerfile 将是:

FROM node:13.12.0-alpine as build
WORKDIR /src
ENV PATH /node_modules/.bin:$PATH
COPY package*.json ./

RUN npm install --silent
COPY . ./

RUN npm run build

FROM nginx:alpine
COPY --from=build /src/build /usr/share/nginx/html
EXPOSE 80

这与上面问题中的Dockerfile是一致的, 在某些特定情况下,可能需要高级配置。