FROM node:14.9-stretch-slim AS build
WORKDIR /usr/src/app
COPY ./package.json ./
RUN yarn
COPY . .
CMD ["yarn", "run", "build"]
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist /usr/share/nginx/html
这是我的dockerfile。构建它时,我收到一条错误消息,说找不到dist。
COPY failed: stat /var/lib/docker/overlay2/e397e0fd69733a25f53995c12dfbab7d24ce20867fede11886d49b9537976394/merged/usr/src/app/dist: no such file or directory
知道为什么会这样吗?
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:1)
这里的问题是在CMD
使用RUN
而不是CMD ["yarn", "run", "build"]
FROM node:14.9-stretch-slim AS build
WORKDIR /usr/src/app
COPY ./package.json ./
RUN yarn
COPY . .
RUN yarn run build
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist /usr/share/nginx/html
有关CMD
的文档中:
CMD
的主要目的是为执行中的容器提供默认值。这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定一条ENTRYPOINT
指令。
有关RUN
的文档中:
RUN
指令将在当前图像顶部的新层中执行所有命令,并提交结果。生成的提交映像将用于Dockerfile中的下一步。
您可以看到CMD
在运行容器时在运行时执行,但是RUN
命令用于构建docker映像
在Dockerfile中,您基本上可以运行映像的任何可执行部分。因此,要检查dist文件夹是否存在或其内容是什么,您可以使用ls
FROM node:14.9-stretch-slim AS build
WORKDIR /usr/src/app
COPY ./package.json ./
RUN yarn
COPY . .
RUN yarn run build
RUN ls -la dist
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist /usr/share/nginx/html