我正在尝试为 Vue 应用程序构建容器映像。
Dockerfile
非常简单,包含各个阶段的构建、结帐后和构建后挂钩。结账后成功运行,但由于某种原因,我遇到错误,看不到 package.json
文件。
我尝试运行
ls -al
在构建命令运行之前查看图像的内容,这是输出:
0.496 drwxr-xr-x 1 root root 4096 Jul 22 13:58 .
0.496 drwxr-xr-x 1 root root 4096 Jul 22 13:58 ..
0.496 drwxr-xr-x 2 root root 4096 Jul 1 00:00 bin
0.496 drwxr-xr-x 2 root root 4096 Jun 19 21:20 boot
0.496 drwxr-xr-x 5 root root 340 Jul 22 13:58 dev
0.496 drwxr-xr-x 1 root root 4096 Jul 22 13:58 etc
0.496 drwxr-xr-x 1 root root 4096 Jul 9 16:49 home
0.496 drwxr-xr-x 8 root root 4096 Jul 1 00:00 lib
0.496 drwxr-xr-x 2 root root 4096 Jul 1 00:00 lib64
0.496 drwxr-xr-x 2 root root 4096 Jul 1 00:00 media
0.496 drwxr-xr-x 2 root root 4096 Jul 1 00:00 mnt
0.496 drwxr-xr-x 1 root root 4096 Jul 9 16:50 opt
0.496 dr-xr-xr-x 183 root root 0 Jul 22 13:58 proc
0.496 drwx------ 2 root root 4096 Jul 1 00:00 root
0.496 drwxr-xr-x 3 root root 4096 Jul 1 00:00 run
0.496 drwxr-xr-x 2 root root 4096 Jul 1 00:00 sbin
0.496 drwxr-xr-x 2 root root 4096 Jul 1 00:00 srv
0.496 dr-xr-xr-x 13 root root 0 Jul 22 13:58 sys
0.496 drwxrwxrwt 1 root root 4096 Jul 22 13:58 tmp
0.496 drwxr-xr-x 1 root root 4096 Jul 1 00:00 usr
0.496 drwxr-xr-x 1 root root 4096 Jul 1 00:00 var
我尝试在 /usr 上运行
ls -al
并看到它包含一个 src
目录,所以我在它上面运行 ls -al
并得到了这个:
0.465 drwxr-xr-x 2 root root 4096 Jun 19 21:20 .
0.465 drwxr-xr-x 1 root root 4096 Jul 1 00:00 ..
有问题的 Dockerfile 是:
# base node image
FROM node:20-bullseye-slim as base
ARG NODE_ENV=staging
ARG DOTENV_KEY
ARG COMMIT_SHA
ARG RELEASE_SEMVER
# set for base and all layer that inherit from it
ENV LOG_LEVEL=debug
ENV DEBUG_API=true
ENV NODE_ENV ${NODE_ENV}
ENV DOTENV_KEY ${DOTENV_KEY}
ENV COMMIT_SHA ${COMMIT_SHA}
ENV RELEASE_SEMVER ${RELEASE_SEMVER}
RUN apt-get update && apt-get install -y curl tini
# Install all node_modules, including dev dependencies
FROM base as deps
WORKDIR /app
COPY package*.json ./
RUN npm install --include=dev
# Copy the rest of the application code
COPY . .
# Build the production image
FROM base as build
# WORKDIR /app
RUN ls -al /usr
ENV NODE_ENV staging
RUN npm run build
# Final image
FROM build as final
WORKDIR /app
EXPOSE 8080
CMD ["npm", "start"]
诚然,我对容器化应用程序非常陌生,因此我将非常感谢您提供的任何帮助。 dockerfile 正在 huub 上创建一个镜像,然后我们的 CI/CD 构建并运行它
我尝试运行
ls -al
几次,看看 docker 容器看到了什么结构,但它在构建失败之前的任何步骤中都没有显示代码。
如果您需要 package.json 才能运行
npm run build
,则需要提供该阶段或该阶段所基于的图像。
在您的情况下,package*.json 仅被复制到 deps 阶段,而不是复制到基础或构建阶段。
如果将以下命令移至基础阶段,那么 deps 和构建阶段都将继承 package*.json 文件的存在:
COPY package*.json ./
由于运行应用程序的 CMD 也会查找 NPM 包文件,这可能就是您想要做的。