Apple M系列Mac用Docker部署Next.js(App目录+sharp)报错求助
Next.js + Sharp + M2 Docker构建Segmentation Fault问题解决
问题场景
Apple M2芯片Mac上,使用Next.js App目录结构开发,满足以下条件时Docker构建失败:
- 项目采用App目录结构
- 单页面加载超过5张图片
- 引入
sharp包 - 通过Docker部署
核心报错日志:
qemu: uncaught target signal 11 (Segmentation fault) - core dumped error Command failed with signal "SIGSEGV".
解决方法
1. 指定Docker构建平台
M2为arm64架构,Docker默认可能使用amd64镜像导致qemu模拟异常。构建时指定arm64平台:
- 构建命令添加参数:
docker build --platform linux/arm64 -t your-project-image .
- 或在Dockerfile开头声明平台:
FROM --platform=linux/arm64 node:20-alpine
2. 配置Sharp的arm64适配镜像
在项目根目录创建对应配置文件,指定Sharp的arm64兼容二进制源:
- 若用npm,创建
.npmrc:
sharp_binary_host=https://npmmirror.com/mirrors/sharp sharp_libvips_binary_host=https://npmmirror.com/mirrors/sharp-libvips
- 若用yarn,创建
.yarnrc.yml:
sharp_binary_host: "https://npmmirror.com/mirrors/sharp" sharp_libvips_binary_host: "https://npmmirror.com/mirrors/sharp-libvips"
之后强制重新安装依赖:
yarn install --force
3. 临时禁用Next.js图片优化(应急方案)
若无需Sharp的图片处理能力,可在next.config.js中禁用图片优化:
/** @type {import('next').NextConfig} */ const nextConfig = { images: { unoptimized: true, }, } module.exports = nextConfig
⚠️ 此方案会丢失Next.js Image组件的自动压缩、格式转换等优化能力,仅适合临时测试。
4. 更新依赖到最新稳定版
升级Next.js和Sharp到最新版本,新版本通常会修复架构兼容问题:
yarn add next@latest sharp@latest
内容的提问来源于stack exchange,提问作者SingleSeeker
相关产品推荐
相关产品推荐

