GNU/Linux >> LINUX-Kenntnisse >  >> Linux

linux-x64-Binärdateien können nicht auf der linuxmusl-x64-Plattform verwendet werden Fehler

Es wird dadurch verursacht, dass Sie docker ausführen auf einer Linux-Plattform und Ihr Computer ist wahrscheinlich Mac oder Windows. Meistens können Sie dieselben Modulversionen verwenden, aber nicht, wenn es Low-Level-Kernelfunktionen wie sharp verwendet .

Sie benötigen eine andere Version von Sharp auf Docker und auf Ihrem lokalen Rechner.

Wahrscheinlich haben Sie Ihr Projekt ohne Docker ausgeführt, dann mit Docker.

Lösung 1: Sie können den Ordner package.lock + node_modules entfernen, dann neu erstellen und jetzt nur Docker verwenden.

Lösung 2: (nicht sauber, kann aber helfen) Entferne Sharp von Ihnen package.json und installieren Sie es später, wenn Sie Ihren Server starten. Zum Beispiel durch Aktualisieren Ihrer package.json:

Paket.json

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

Sie können dies auch in Ihrer Dockerfile-Datei tun:

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

Ich hatte das Problem mit einer mehrstufigen Docker-Datei, bei der die beiden Bilder auf verschiedenen Plattformen basieren, und ich habe es so gelöst:

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

Der Trick besteht darin, den Lauf npm install sharp zu installieren im letzten Container - in meinem Fall war es Alpine Linux, das sich vom Basis-Image von node:14 unterscheidet (offensichtlich ist es eine andere Plattform). Sharp wird direkt für bestimmte Plattformen kompiliert, sodass npm install ausgeführt wird in einem Container zu speichern und diese kompilierten/vorkompilierten Dateien in einen anderen Container zu kopieren, kann nicht funktionieren. Ich gehe davon aus, dass dies immer noch eine bessere Lösung ist als ein Fallback auf das Node:14-Image (nur Container ausführen), das viel größer ist (in meinem Fall 1,4 GB -> 0,7 GB Alpine).

Denken Sie daran, dass Sie immer noch eine .dockeringore-Datei mit node_modules haben sollten, die Ihnen nicht hilft, dieses Problem zu lösen. Es beschleunigt lediglich die Prozesserstellung mit Cache auf dem CI-Server oder auf dem lokalen Host (mit unterschiedlichen Betriebssystemen).

Prost


Ich hatte den gleichen Fehler mit Docker. Das Problem war, dass ich vergessen habe, einen .dockerignore einzufügen Datei und mein node_modules wurden in den Container kopiert.

Versuchen Sie, einen .dockerignore zu erstellen Datei im Stammverzeichnis Ihres Projekts (neben Ihrem Dockerfile) mit z. B.:

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

Linux
  1. So lösen Sie den sudoers-Fehler – „Entschuldigung, Sie müssen ein tty haben, um sudo auszuführen“

  2. OpenCA-Fehler Zertifikat kann nicht aus der Datenbank geladen werden

  3. Python.h kann nicht kompiliert werden – Websockify-Installationsfehler

  4. phpize-Konfigurationsfehler:Quellen können nicht gefunden werden (config.m4)

  5. Wie führe ich einen Befehl als Systemadministrator (root) aus?

Fehlerbehebung:Fehler beim Abrufen des cdrom apt-get-Updates kann nicht zum Hinzufügen neuer CD-ROMs verwendet werden

WAZUH Die Open-Source-Sicherheitsplattform

FEHLER:ld.so:Objekt LD_PRELOAD kann nicht vorab geladen werden:ignoriert

Wie kann ich den Fehler beheben, dass die Binärdatei nicht ausgeführt werden kann?

Fehler beim Versuch, Xorg zu verwenden:Nur Konsolenbenutzer dürfen den X-Server ausführen?

Erhalten des Fehlers:bash:./program:kann Binärdatei nicht ausführen:Fehler im Exec-Format