【问题标题】:How run next.js with node-sharp for docker如何使用 node-sharp 为 docker 运行 next.js
【发布时间】:2022-10-01 11:28:59
【问题描述】:

我在为 Dockerfile 实现Sharp时遇到问题。

错误:需要以独立模式安装“sharp”,图像优化才能正常运行

Next.js with sharp 适用于本地开发:

  • 下一个 12.0.1
  • 尖锐0.30.2
  • 节点 16.xx
  • npm 8.xx
  • 操作系统 - macOS Monterey - 12.2.1,M1 PRO

next.config.js

module.exports = {
  experimental: {
    outputStandalone: true,
  },

}

Dockerfile:

FROM node:16-alpine AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat

WORKDIR /app
COPY package.json package-lock.json ./ 
RUN npm ci

# Rebuild the source code only when needed
FROM node:16-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .

# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1

RUN npm run build

# Production image, copy all the files and run next
FROM node:16-alpine AS runner
WORKDIR /app

ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

# You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/next-i18next.config.js ./
COPY --from=builder /app/next-sitemap.js ./cd
COPY --from=builder /app/jsconfig.json ./jsconfig.json
COPY --from=builder /app/data/ ./data
COPY --from=builder /app/components/ ./components
COPY --from=builder /app/utils/ ./utils
COPY --from=builder /app/assets/ ./assets

# Automatically leverage output traces to reduce image size 
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

ENV PORT 3000

CMD [\"node\", \"server.js\"]

.env 文件:

NEXT_SHARP_PATH=/tmp/node_modules/sharp next start

Sharp 安装在 package.json 中

我检查了 Next/Vercel tuts:

运行泊坞窗:

docker build --no-cache . -t website-app && docker run --name website -p 3000:3000 website-app
  • 不应该是/node_modules/sharp 而不是/tmp/node_modules/sharp 吗?
  • @SilvinoEscalona 我试过了,但没有用。
  • 面临同样的错误。你想清楚了吗??
  • @Anandhu 还没有,我已经尝试了一切,但没有成功。
  • @miko866 这对我有用。 FROM node:alpine AS runner WORKDIR /app ENV NODE_ENV production ENV NEXT_SHARP_PATH /app/node_modules/sharp next start

标签: docker next.js sharp


【解决方案1】:

我想到了。

我从 .env 中删除了 NEXT_SHARP_PATH=/tmp/node_modules/sharp next start 如果没有NEXT_SHARP_PATH,本地 docker 不能与 node-sharp 一起使用,这很奇怪。

但我使用 Docker 将它部署在我的 K8s 集群中,它按预期工作。

【讨论】:

    【解决方案2】:

    对我有用的是在 Dockerfile 中更改 Alpine Linux 的版本: FROM node:18-alpine AS deps(而不是节点:16)

    在我的 .env 文件中添加或删除 node-sharp 对我不起作用。

    【讨论】:

      【解决方案3】:
      npm i sharp
      

      这为我解决了问题

      【讨论】:

        猜你喜欢
        • 2020-07-31
        • 2021-08-27
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 2021-06-27
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多