linux-x64 二进制文件不能用于 linuxmusl-x64 平台错误

pic*_*lou 19 linux platform node.js npm docker

我正在Sharp使用 package.json 在 Nodejs 项目的 docker 镜像上安装用于图像压缩的包。当我创建容器时,我收到有关sharp包的以下错误:

/app/node_modules/sharp/lib/libvips.js:67 
throw new Error(`'${vendorPlatformId}' binaries cannot be used on the '${currentPlatformId}' platform. Please remove the 'node_modules/sharp/vendor' directory and run 'npm install'.`);
 ^ Error: 'linux-x64' binaries cannot be used on the 'linuxmusl-x64' platform. Please remove the 'node_modules/sharp/vendor' directory and run 'npm install'.
at Object.hasVendoredLibvips (/app/node_modules/sharp/lib/libvips.js:67:13)
at Object.<anonymous> (/app/node_modules/sharp/lib/constructor.js:8:22)
at Module._compile (module.js:577:32) 
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32) 
at tryModuleLoad (module.js:453:12) 
at Function.Module._load (module.js:445:3) 
at Module.require (module.js:504:17) 
at require (internal/module.js:20:19) 
at Object.<anonymous> (/app/node_modules/sharp/lib/index.js:3:15)'.
Run Code Online (Sandbox Code Playgroud)

我已经删除了整个 node_module 目录并重新运行该目录中的npm install命令以重新安装所有包并重建 docker 映像,但我仍然收到错误消息。

任何有关如何解决此问题的建议表示赞赏。

bel*_*ref 31

我在使用 Docker 时遇到了同样的错误。问题是我忘记包含一个.dockerignore文件并且我的文件node_modules被复制到容器中。

尝试.dockerignore在项目的根目录(在 Dockerfile 旁边)创建一个文件,例如:

node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
.gitignore
Run Code Online (Sandbox Code Playgroud)


Seb*_*rin 5

这是由于您docker在 Linux 平台上运行并且您的机器可能是 mac 或 windows 造成的。大多数时候你可以使用相同的模块版本,但当它使用像sharp.

您需要在 Docker 和本地机器上使用不同版本的Sharp

您可能已经在没有 docker 的情况下运行了您的项目,然后使用了 docker。

解决方案 1: 您可以删除 package.lock + node_modules 文件夹,然后重建,现在只使用 docker。

解决方案 2:(不干净但可以提供帮助)从 package.json 中删除Sharp并在稍后启动服务器时安装它。例如通过更新你的 package.json:

包.json

{
  ...
  "scripts": {
    ...
    "start-docker": "yarn add sharp && nodemon index.js"
  },
  ...
Run Code Online (Sandbox Code Playgroud)

您也可以在 Dockerfile 文件中执行此操作:

文件

FROM node:13
ADD package.json /package.json
RUN yarn install
RUN yarn add sharp
ENV NODE_PATH=/node_modules
ENV PATH=$PATH:/node_modules/.bin
WORKDIR /app
CMD ["yarn","start-docker"]
Run Code Online (Sandbox Code Playgroud)