vanblog icon indicating copy to clipboard operation
vanblog copied to clipboard

[问题反馈]: docker镜像打包失败

Open Mrkk1 opened this issue 11 months ago • 1 comments

问题描述 | Describe the bug

官方提供的dockerfile和pnpm-lock文件存在冲突,无法顺利的进行docker打包。 /Dockerfile 下的 FROM node:18 AS WEBSITE_BUILDER 就无法执行,当我手动改为 node:18-alpine后尝试继续构建镜像, 出现关于sharp包的报错,

39.35 Progress: resolved 1191, reused 0, downloaded 1191, added 1191, done 41.34 .../node_modules/vue-demi postinstall$ node ./scripts/postinstall.js 41.81 .../[email protected]/node_modules/sharp install$ (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy) 42.83 .../node_modules/vue-demi postinstall: Done 42.86 .../[email protected]/node_modules/sharp install: sharp: Installation error: Invalid Version: 1.2.4_git20230717 42.86 .../[email protected]/node_modules/sharp install: sharp: Please see https://sharp.pixelplumbing.com/install for required dependencies 42.95 .../[email protected]/node_modules/sharp install: Failed 42.96  ELIFECYCLE  Command failed with exit code 1.

Dockerfile:53

51 | RUN pnpm config set fetch-retries 20 -g 52 | RUN pnpm config set fetch-timeout 600000 -g 53 | >>> RUN pnpm install --frozen-lockfile 54 | RUN pnpm build:website 55 |

ERROR: failed to solve: process "/bin/sh -c pnpm install --frozen-lockfile" did not complete successfully: exit code: 1

不知道是什么原因导致的

复现网址 | Website URL

No response

版本 | Version

最新版本

部署方式? | How do you deploy vanblog?

Docker 部署(文档默认)

Mrkk1 avatar Mar 20 '24 06:03 Mrkk1

请使用 Markdown 文本框框上错误报告,这样的形式不便于人类阅读。

GPT4: 出现您提到的问题,主要原因可能与sharp包在安装过程中对依赖项版本的特定要求有关,特别是在 Alpine Linux 环境中。Alpine Linux 由于其轻量级和安全性而受到许多开发人员的喜爱,但是它使用的 musl libc 和其他基础工具与标准的 GNU/Linux 发行版不同,这可能会导致某些 Node.js 包安装时遇到问题。以下是解决这一问题的几个步骤:

1. 安装必需的依赖项

sharp依赖于一些本地库,如libvips。Alpine 版本的 Node 镜像不会预装这些库,所以你需要手动安装它们。你可以在Dockerfile中添加如下命令来安装这些必需的依赖:

FROM node:18-alpine AS WEBSITE_BUILDER

# 安装 build 依赖
RUN apk add --no-cache libc6-compat g++ make python3 py3-pip vips-dev fftw-dev gcc libc-dev autoconf automake libtool nasm build-base zlib-dev

# 接下来是你的安装指令

2. 使用 npm 替代 pnpm

虽然pnpm是一个很好的包管理工具,提供了比npmyarn更快的安装速度和更好的磁盘空间利用率,但有时它可能会在处理某些依赖或子依赖时遇到问题。作为测试,尝试使用npm而不是pnpm来看是否能解决问题:

# 使用 npm 安装依赖
RUN npm install --frozen-lockfile

如果你坚持使用pnpm,确保它是最新版本,因为pnpm经常更新以解决类似的问题。

3. 检查 sharp 版本

确保你使用的sharp版本与你的 Node.js 版本兼容。有时候,指定一个不同版本的sharp可能就能解决安装问题。你可以查看sharp官方文档或在package.json中指定一个兼容的版本号。

4. 使用预编译的 binary

sharp通常会尝试下载预编译的二进制文件以避免编译过程。确保在构建过程中网络连接没有问题,以便sharp能够下载所需的二进制文件。如果自动下载失败,你可能需要手动下载并指定二进制文件的路径。

5. 最后的 Dockerfile 样例

结合上述建议,你的Dockerfile可能会像这样:

FROM node:18-alpine AS WEBSITE_BUILDER

# 安装依赖项
RUN apk update && apk add --no-cache libc6-compat g++ make python3 py3-pip vips-dev fftw-dev gcc libc-dev autoconf automake libtool nasm build-base zlib-dev

# 设置工作目录
WORKDIR /app

# 复制项目文件
COPY . .

# 安装依赖
RUN npm install --frozen-lockfile

# 构建应用
RUN npm run build:website

# 继续你的部署步骤...

如果这些步骤仍然无法解决问题,请确保检查sharp的安装日志和官方文档,寻找可能的特定于 Alpine 的解决方案。

CornWorld avatar Apr 03 '24 11:04 CornWorld