You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1 Pro环境下Docker Compose构建Strapi遇node-gyp未找到错误

解决Docker构建Strapi时node-gyp找不到的问题

问题原因

错误提示node-gyp: not found,核心原因是Alpine版本的Node镜像默认未预装node-gyp,而Strapi依赖的sharp库在编译过程中需要调用该工具;同时M1 Pro芯片的架构差异,会触发sharp优先尝试使用全局libvips并启动源码编译流程,进一步暴露了node-gyp缺失的问题。

解决方案

修改strapi/Dockerfile,补充安装node-gyp并调整sharp的编译参数,同时优化容器内的依赖安装逻辑:

FROM node:18-alpine
ENV PYTHONUNBUFFERED=1
# 合并安装编译依赖与node-gyp,减少镜像构建层
RUN apk add --update --no-cache python3 build-base gcc autoconf automake zlib-dev libpng-dev nasm bash git vips-dev && \
    ln -sf python3 /usr/bin/python && \
    python3 -m ensurepip && \
    pip3 install --no-cache --upgrade pip setuptools && \
    npm install -g node-gyp

# 强制sharp忽略全局libvips,优先使用适配arm64的预编译包(解决M1架构兼容问题)
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=true
ENV NODE_ENV=${NODE_ENV}

WORKDIR /opt/
COPY package.json yarn.lock ./
RUN yarn config set network-timeout 600000 -g && yarn install --frozen-lockfile
ENV PATH /opt/node_modules/.bin:$PATH

WORKDIR /opt/app
COPY . .
RUN chown -R node:node /opt/app
USER node
RUN ["yarn", "build"]
EXPOSE 1337
CMD ["yarn", "develop"]

修改说明

  • 全局安装node-gyp:通过npm install -g node-gyp将工具加入全局环境,确保sharp编译时能直接调用
  • 设置SHARP_IGNORE_GLOBAL_LIBVIPS:避免M1芯片下sharp检测到全局libvips后触发源码编译,改用预编译包降低失败概率
  • 添加--frozen-lockfile:强制yarn安装的依赖与lock文件完全一致,避免版本不一致导致的编译异常
  • 合并apk命令:减少镜像构建层数,优化整体构建速度

额外注意事项

  1. 移除冲突的Volume挂载:当前docker-compose.yml中,将本地package.json和yarn.lock挂载到容器/opt/目录,会覆盖容器内已安装的依赖环境(本地M1架构依赖与容器Alpine环境存在兼容性差异),建议删除这两行挂载:

    # 删除以下两行
    # - ./strapi/package.json:/opt/package.json
    # - ./strapi/yarn.lock:/opt/yarn.lock
    
  2. 清理旧缓存重新构建:修改配置后,执行以下命令清理旧镜像与缓存,确保新配置生效:

    docker-compose down -v
    docker-compose build --no-cache
    docker-compose up
    

内容的提问来源于stack exchange,提问作者dolor3sh4ze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:46:27