Doo*_*mel 19 node.js docker next.js pnpm
我正在尝试使用 NextJS 独立模式和 PNPM 创建生产 Dockerfile。
在next.config.js
我有输出配置:
experimental: {
outputStandalone: true,
outputFileTracingRoot: path.join(__dirname, '../../'),
},
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中,我使用多阶段构建:
# BUILD STEP
FROM node:16.13-alpine as landing-builder
WORKDIR /dml-sdk
COPY ./pnpm-workspace.yaml .
COPY ./pnpm-lock.yaml .
COPY ./tsconfig.base.json .
COPY ./package.json .
COPY ./apps/landing ./apps/landing
RUN apk --no-cache add curl
RUN apk --no-cache add git
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm@6
RUN pnpm config set store-dir .pnpm-store
RUN pnpm i
RUN pnpm build
# RUNNER STEP
FROM node:16.13-alpine as landing-runner
WORKDIR /dml-sdk
ENV NODE_ENV production
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
COPY --from=landing-builder /dml-sdk/apps/landing/public ./public
COPY --from=landing-builder --chown=nextjs:nodejs /dml-sdk/apps/landing/.next/standalone ./
COPY --from=landing-builder --chown=nextjs:nodejs /dml-sdk/node_modules ./node_modules
ENV NEXT_TELEMETRY_DISABLED 1
ENV PORT 3010
EXPOSE 3010
WORKDIR /dml-sdk/apps/landing
CMD ["node", "server.js"]
Run Code Online (Sandbox Code Playgroud)
由于某种原因我遇到了错误:
landing | Error: Cannot find module 'next/dist/server/next-server'
landing | Require stack:
landing | - /powerplay-sdk/apps/landing/server.js
Run Code Online (Sandbox Code Playgroud)
看起来下一个服务器没有捆绑在standalone
目录中,并且行:
const NextServer = require('next/dist/server/next-server').default
Run Code Online (Sandbox Code Playgroud)
链接到根node_modules,而不是/dml-sdk/standalone/apps/landing/node_modules
:
node_modules/.pnpm/next@12.0.8_react-dom@17.0.2+react@17.0.2/node_modules/next/dist/server/next-server.d.ts
Run Code Online (Sandbox Code Playgroud)
是否可以在构建步骤中禁用下一个服务器链接,以便standalone
node_modules包含next-server
?
我猜问题出在
COPY --from=landing-builder --chown=nextjs:nodejs /dml-sdk/apps/landing/.next/standalone ./
Run Code Online (Sandbox Code Playgroud)
它将把standalone
文件/文件夹从WORKDIR /dml-sdk
. 所以你得到了 /dml-sdk/standalone
。下一步尝试
COPY --from=landing-builder --chown=nextjs:nodejs /dml-sdk/apps/landing/.next/standalone ./apps/landing/.next/standalone
Run Code Online (Sandbox Code Playgroud)
或者
COPY --from=landing-builder --chown=nextjs:nodejs /dml-sdk/apps ./apps
Run Code Online (Sandbox Code Playgroud)
或者
COPY --from=landing-builder --chown=nextjs:nodejs /dml-sdk/apps/landing ./apps/landing
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2399 次 |
最近记录: |