Docker构建失败因NPM问题:sharp依赖安装报错及日志缺失
Docker构建Sharp依赖安装失败的解决方法
问题说明
执行docker build -t booru ./booru时,RUN npm ci步骤报错,sharp依赖安装失败,提示Invalid Version: 1.2.4_git20230717;系统提示NPM版本过时,但本地已完成更新,且指定路径下找不到NPM日志文件。
错误日志
root@ubuntu:/var/www/html# docker build -t booru ./booru [+] Building 16.5s (9/19) docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 685B 0.0s => [internal] load metadata for docker.io/library/node:18-alpine 0.3s => [internal] load .dockerignore 0.0s => => transferring context: 45B 0.0s => [internal] load build context 0.0s => => transferring context: 2.67kB 0.0s => [stage-1 1/6] FROM docker.io/library/node:18-alpine@sha256:ca9f6cb0466f9638e59e0c249d335a07c867cd50c429b5c7830dda1bed584649 0.0s => CACHED [stage-1 2/6] WORKDIR /app 0.0s => CACHED [builder 2/10] WORKDIR /build 0.0s => CACHED [builder 3/10] ADD ./package.json ./package-lock.json ./ 0.0s => ERROR [builder 4/10] RUN npm ci 16.1s ------ > [builder 4/10] RUN npm ci: 15.89 npm notice 15.89 npm notice New minor version of npm available! 10.2.4 -> 10.4.0 15.89 npm notice Changelog: <https://github.com/npm/cli/releases/tag/v10.4.0> 15.89 npm notice Run `npm install -g npm@10.4.0` to update! 15.89 npm notice 15.90 npm ERR! code 1 15.90 npm ERR! path /build/node_modules/sharp 15.90 npm ERR! command failed 15.90 npm ERR! command sh -c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy) 15.90 npm ERR! sharp: Installation error: Invalid Version: 1.2.4_git20230717 15.90 15.90 npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2024-02-27T10_19_21_922Z-debug-0.log ------ WARNING: current commit information was not captured by the build: failed to read current commit information with git rev-parse --is-inside-work-tree Dockerfile:6 -------------------- 4 | 5 | ADD ./package.json ./package-lock.json ./ 6 | >>> RUN npm ci 7 | 8 | ARG NEXT_PUBLIC_NO_INDEX -------------------- ERROR: failed to solve: process "/bin/sh -c npm ci" did not complete successfully: exit code: 1 root@ubuntu:/var/www/html# dir /root/.npm/_logs/ root@ubuntu:/var/www/html#
解决步骤
1. 修复Sharp版本解析异常
错误根源是Alpine系统中libvips版本号带_git后缀,sharp无法正常解析。可通过两种方式处理:
- 在Dockerfile的
RUN npm ci前添加环境变量,强制sharp使用预编译二进制包:ENV SHARP_IGNORE_GLOBAL_LIBVIPS=true - 本地升级sharp兼容版本:执行
npm update sharp,更新package.json和package-lock.json后重新构建。
2. 处理NPM版本提示
Docker构建使用的是镜像内的NPM版本,与本地更新无关。若要消除提示,可在Dockerfile中先更新NPM:
RUN npm install -g npm@10.4.0
3. 获取完整NPM日志
日志文件在构建临时容器的/root/.npm/_logs/路径下,本地找不到是因为构建过程在容器内执行。可通过两种方式查看:
- 调试用:修改Dockerfile,在
RUN npm ci后添加复制日志命令:RUN npm ci && cp /root/.npm/_logs/* /app/logs/ - 手动调试:启动临时容器挂载构建上下文,执行命令查看日志:
docker run -it --rm -v $(pwd)/booru:/build node:18-alpine sh cd /build npm ci cat /root/.npm/_logs/*.log
4. 补充Alpine系统依赖
Alpine缺少sharp编译所需依赖,提前安装可避免潜在问题:
RUN apk add --no-cache vips-dev fftw-dev
内容的提问来源于stack exchange,提问作者Consuela
相关产品推荐
相关产品推荐

