生成反应应用程序的构建失败的 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 start
和 CMD
.
相反,只需保留它,您就可以在 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是一致的,
在某些特定情况下,可能需要高级配置。
我有一个 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 start
和 CMD
.
相反,只需保留它,您就可以在 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是一致的, 在某些特定情况下,可能需要高级配置。