GNU/Linux >> Linux Esercitazione >  >> Linux

I binari linux-x64 non possono essere utilizzati sulla piattaforma linuxmusl-x64 errore

È causato dal fatto che esegui docker su una piattaforma Linux e la tua macchina è probabilmente Mac o Windows. La maggior parte delle volte puoi usare le stesse versioni del modulo ma non quando usa funzioni del kernel di basso livello come sharp .

Hai bisogno di una versione diversa di Sharp su Docker e sul tuo computer locale.

Probabilmente hai eseguito il tuo progetto senza docker, quindi con docker.

Soluzione 1: Puoi rimuovere la cartella package.lock + node_modules, quindi ricostruire e ora utilizzare solo la finestra mobile.

Soluzione 2: (non pulito ma può aiutare)Rimuovi Sharp da te package.json e installalo successivamente quando avvii il tuo server. Ad esempio aggiornando il tuo package.json:

pacchetto.json

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

puoi farlo anche nel tuo file 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"]

Ho affrontato il problema con il file docker multistadio in cui le due immagini sono basate su piattaforme diverse e l'ho risolto in questo modo:

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

Il trucco è installare run npm install sharp nel contenitore finale - nel mio caso era Alpine Linux che è diverso dall'immagine di base del nodo:14 (ovviamente è una piattaforma diversa). Sharp è compilato direttamente su determinate piattaforme, quindi esegue npm install in un contenitore e copiare quei file compilati/precompilati in un altro contenitore non può funzionare. Presumo che questa sia una soluzione ancora migliore rispetto al fallback su node:14 image (esegui solo il container) che è molto più grande (nel mio caso 1,4 Gb -> 0,7 Gb Alpine).

Tieni presente che dovresti ancora avere il file .dockeringore con node_modules non ti aiuterà a risolvere questo problema. Accelera solo la costruzione del processo con la cache sul server CI o su localhost (con sistema operativo diverso).

Saluti


Ho riscontrato lo stesso errore con Docker. Il problema è che ho dimenticato di includere un .dockerignore file e il mio node_modules venivano copiati nel contenitore.

Prova a creare un .dockerignore file nella root del tuo progetto (accanto al tuo Dockerfile) con ad esempio:

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

Linux
  1. Come risolvere l'errore sudoers - "mi dispiace, devi avere un tty per eseguire sudo"

  2. Errore OpenCA Impossibile caricare il certificato dal database

  3. Come eseguire un comando come amministratore di sistema (root)?

  4. L'aggiornamento parziale a 16.04.3 Lts Error non può creare il risveglio?

  5. ERRORE:ld.so:l'oggetto LD_PRELOAD non può essere precaricato:ignorato

I 7 spazi dei nomi Linux più utilizzati

Come risolvere:"Impossibile recuperare il cdrom apt-get update non può essere utilizzato per aggiungere nuovi CD-ROM" Errore

WAZUH La piattaforma di sicurezza open source

Errore in Eclipse:il progetto non può essere compilato finché gli errori del percorso di compilazione non vengono risolti

Impossibile trovare l'errore di configurazione di pkg

Come posso risolvere l'errore che non può eseguire il file binario?