我在 Nuxt 前端 docker 容器中执行
docker build
命令时遇到问题。这是我的Dockerfile
:
FROM node:lts-alpine as base
RUN npm install -g pnpm
WORKDIR /usr/src/app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install
COPY . .
RUN pnpm run build
EXPOSE 3000
FROM node:lts-alpine as final
WORKDIR /app
COPY --from=base /usr/src/app/.output .
EXPOSE 3000
CMD ["node", "server/index.mjs"]
使用此
docker build
运行 Dockerfile
时,出现以下错误:
=> [base 4/7] COPY package.json pnpm-lock.yaml ./ 0.1s
=> [base 5/7] RUN pnpm install 13.0s
=> [base 6/7] COPY . . 2.7s
=> ERROR [base 7/7] RUN pnpm run build 0.7s
------
> [base 7/7] RUN pnpm run build:
0.581
0.581 > @ build /usr/src/app
0.581 > nuxi build
0.581
0.602 node:internal/modules/cjs/loader:1147
0.602 throw err;
0.602 ^
0.602
0.602 Error: Cannot find module '/usr/src/app/node_modules/nuxt/bin/nuxt.mjs'
0.602 at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
0.602 at Module._load (node:internal/modules/cjs/loader:985:27)
0.602 at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
0.602 at node:internal/main/run_main_module:28:49 {
0.602 code: 'MODULE_NOT_FOUND',
0.602 requireStack: []
0.602 }
0.602
0.602 Node.js v20.11.1
0.605 ELIFECYCLE Command failed with exit code 1.
------
Dockerfile:24
--------------------
22 | COPY . .
23 |
24 | >>> RUN pnpm run build
25 | EXPOSE 3000
26 |
--------------------
ERROR: failed to solve: process "/bin/sh -c pnpm run build" did not complete successfully: exit code: 1
docker build
旗帜运行 --no-cache
。RUN pnpm run build
行,然后进入容器内部检查该文件是否存在于其中。事实并非如此。这个文件应该在里面吗?有人遇到同样问题吗
您是否拥有
package.json
中列出的所有必需包?
🗎
package.json
{
"name": "test",
"private": true,
"scripts": {
"build": "nuxi build"
},
"engines": {
"npm": "^9.0.0"
},
"dependencies": {
"nuxt": "3.11.1",
"nuxi": "3.11.1",
"@nuxt/kit": "3.11.1"
}
}
🗎
Dockerfile
(与所提供的相同,除了EXPOSE
阶段省略了base
。)
FROM node:lts-alpine as base
RUN npm install -g pnpm
WORKDIR /usr/src/app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install
COPY . .
RUN pnpm run build
FROM node:lts-alpine as final
WORKDIR /app
COPY --from=base /usr/src/app/.output .
EXPOSE 3000
CMD ["node", "server/index.mjs"]