mik*_*866 6 docker next.js sharp
我在为 Dockerfile 实现 Sharp 时遇到问题。
Error: 'sharp' is required to be installed in standalone mode for the image
optimization to function correctly
Run Code Online (Sandbox Code Playgroud)
Next.js 和 Sharp 非常适合本地开发:
next.config.js
module.exports = {
experimental: {
outputStandalone: true,
},
Run Code Online (Sandbox Code Playgroud)
}
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"]
Run Code Online (Sandbox Code Playgroud)
.env 文件:
NEXT_SHARP_PATH=/tmp/node_modules/sharp next start
Run Code Online (Sandbox Code Playgroud)
Sharp 安装在 package.json 中
我检查了 Next/Vercel 的图:
运行 Docker:
docker build --no-cache . -t website-app && docker run --name website -p 3000:3000 website-app
Run Code Online (Sandbox Code Playgroud)
对于 中的最后一步(标记为“runner”的步骤)Dockerfile,将基本图像替换为node:16-slim。该映像基于 Debian,因此它比alpine变体大约大 20 MB,但它具有运行sharp.
当使用与您类似的时Dockerfile,我发现NEXT_SHARP_PATH使用基于 Debian 的 Node 映像时不需要环境变量。
作为参考,这里是有关错误消息的 NextJS 文档: https: //nextjs.org/docs/messages/sharp-missing-in-product
更新:您还可以libc使用以下标志指定在基本 Docker 映像中找到的实现:
RUN npm_config_platform=linux npm_config_arch=x64 npm_config_libc=glibc npm ci
Run Code Online (Sandbox Code Playgroud)
有关这些标志的更多信息,请参阅Sharp 的文档。
我想到了。
我NEXT_SHARP_PATH=/tmp/node_modules/sharp next start从 .env 中删除了本地 docker,如果没有,则无法与 node-sharp 一起使用NEXT_SHARP_PATH,这很奇怪。
但我使用 Docker 将其部署在我的 K8s 集群中,并且它按预期工作。
| 归档时间: |
|
| 查看次数: |
8600 次 |
| 最近记录: |