Docker 在构建 Vue 应用容器时找不到 package.json

问题描述 投票:0回答:1

我正在尝试为 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 容器看到了什么结构,但它在构建失败之前的任何步骤中都没有显示代码。

docker vue.js dockerfile docker-registry
1个回答
0
投票

如果您需要 package.json 才能运行

npm run build
,则需要提供该阶段或该阶段所基于的图像。

在您的情况下,package*.json 仅被复制到 deps 阶段,而不是复制到基础或构建阶段。

如果将以下命令移至基础阶段,那么 deps 和构建阶段都将继承 package*.json 文件的存在:

COPY package*.json ./

由于运行应用程序的 CMD 也会查找 NPM 包文件,这可能就是您想要做的。

© www.soinside.com 2019 - 2024. All rights reserved.