在 Docker 容器中构建用于生产的 Create React App

Building Create React App for production in Docker Container

我在为我的 CRA 申请创建 docker 图像时遇到问题。这是我用于生产环境的 Dockerfile:

# base image
FROM node:10.13.0
# set working directory
WORKDIR /usr/src/app

# install and cache app dependencies
COPY package.json yarn.lock ./
RUN yarn

COPY . ./
# RUN yarn cache clean 
RUN yarn build

# Stage 2 - the production environment
FROM nginx:latest
# COPY build /usr/share/nginx/html
COPY ./build /var/www
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

docker build 进程成功运行到第 8 步,returns 出现以下错误:Step 8/11 : COPY ./build /var/www lstat build: no such file or directory

根据我的理解,错误告诉我构建文件夹毕竟没有创建,因此无法移动。

这个 Dockerfile 使用 multi-stage build。第 8 步 - COPY ./build /var/www 失败,因为它试图将 build 目录从 nginx 映像(第二阶段,而不是从 yarn build 是 运行 的第一阶段)复制到 /var/www,这是不存在的。

要使其正常工作,请指定应从第一阶段复制 build 目录(其中 yarn build 是 运行)。为此,进行以下更改:

  1. 通过将第一行更改为 FROM node:10.13.0 AS base 来命名基础阶段(可以使用任何名称而不是此处的 base)。
  2. COPY ./build /var/www 更改为 COPY --from=base ./build /var/www 表示我们要从第一阶段而不是第二阶段复制 build 目录。