GNU/Linux >> Znalost Linux >  >> Linux

binární soubory linux-x64 nelze použít na chybě platformy linuxmusl-x64

Je to způsobeno tím, že spustíte docker na platformě Linux a váš počítač je pravděpodobně mac nebo windows. Většinu času můžete použít stejné verze modulu, ale ne, když používá nízkoúrovňové funkce jádra jako sharp .

Potřebujete jinou verzi Sharp na Dockeru a na vašem místním počítači.

Pravděpodobně jste svůj projekt spustili bez dockeru, pak s ukotvovačem.

Řešení 1: Můžete odstranit složku package.lock + node_modules, poté znovu sestavit a nyní používat pouze docker.

Řešení 2: (není čisté, ale může pomoci) Odebrat Sharp z vašeho package.json a nainstalujte jej později při spuštění serveru. Například aktualizací souboru package.json:

package.json

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

můžete to udělat také v souboru Dockerfile:

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

Čelil jsem problému s vícestupňovým souborem dockeru, kde jsou dva obrázky založeny na různých platformách, a vyřešil jsem to takto:

FROM node:14 AS builder
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build

FROM node:14-alpine
WORKDIR /app
COPY --from=builder /app ./
RUN npm install sharp
CMD ["npm", "run", "start:prod"]

Trik je v instalaci run npm install sharp ve finálním kontejneru - v mém případě to byl Alpine linux, který se liší od základního obrazu node:14 (samozřejmě je to jiná platforma). Sharp je kompilován přímo na určitou platformu, takže běží npm install v jednom kontejneru a kopírování těchto zkompilovaných / předkompilovaných souborů do jiného kontejneru nemůže fungovat. Předpokládám, že je to stále lepší řešení než návrat k obrazu node:14 (pouze spustit kontejner), který je mnohem větší (v mém případě 1,4Gb -> 0,7Gb Alpine).

Mějte na paměti, že byste stále měli mít soubor .dockeringore s node_modules, který vám tento problém nepomůže. Pouze urychluje vytváření procesů pomocí mezipaměti na serveru CI nebo na místním hostiteli (s různými OS).

Na zdraví


Setkal jsem se se stejnou chybou s Dockerem. Problém byl v tom, že jsem zapomněl uvést .dockerignore soubor a můj node_modules byly kopírovány do kontejneru.

Zkuste vytvořit .dockerignore soubor v kořenovém adresáři vašeho projektu (vedle vašeho Dockerfile) s např.:

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

Linux
  1. Jak vyřešit chybu sudoers – „promiňte, ke spuštění sudo musíte mít tty“

  2. Chyba OpenCA Nelze načíst certifikát z databáze

  3. Nelze zkompilovat Python.h – Chyba instalace Websockify

  1. chyba konfigurace phpize:nelze najít zdroje (config.m4)

  2. Jak spustit příkaz jako správce systému (root)?

  3. Nemůžete najít -lm?

  1. CMake Error:V tomto projektu jsou použity následující proměnné, ale jsou nastaveny na NOTFOUND

  2. Chyba v Eclipse:Projekt nelze sestavit, dokud nebudou vyřešeny chyby cesty sestavení

  3. CHYBA:ld.so:objekt LD_PRELOAD nelze předem načíst:ignorováno