linux-x64 binaries cannot be used on the linuxmusl-x64 platform error

断了今生、忘了曾经 提交于 2021-01-22 04:09:34

问题


I'm installing the Sharp package for image compression on the docker image for a Nodejs project with package.json. When I create the container I get the following error regarding to the sharp package:

/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)'.

I have removed the whole node_module directory and reran the npm install command in the directory to reinstall all pack and also rebuilt the docker image but I'm still getting the error.

Any recommendations on how to fix this issue is appreciated.


回答1:


I faced the same error with Docker. The problem was that I forgot to include a .dockerignore file and my node_modules were being copied into the container.

Try creating a .dockerignore file in the root of your project (next to your Dockerfile) with e.g.:

node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
.gitignore



回答2:


It's caused by the fact you run docker on a Linux platform and your machine is probably mac or windows. Most of the time you can use the same module versions but not when it uses low level kernel functions like sharp.

You need a different version of Sharp on Docker and on your local machine.

You have probably run your project without docker, then with docker.

Solution 1: You can remove package.lock + node_modules folder then rebuild and now only use docker.

Solution 2: (not clean but can help) Remove Sharp from you package.json and install it later when you start your server. For example by updating your package.json:

package.json

{
  ...
  "scripts": {
    ...
    "start-docker": "yarn add sharp && nodemon index.js"
  },
  ...

you can do it in your Dockerfile file as well:

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"]


来源:https://stackoverflow.com/questions/57932529/linux-x64-binaries-cannot-be-used-on-the-linuxmusl-x64-platform-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!