GNU/Linux >> Linux の 問題 >  >> Linux

linux-x64 バイナリは linuxmusl-x64 プラットフォーム エラーで使用できません

docker を実行したことが原因です Linux プラットフォームで、マシンはおそらく mac または windows です。ほとんどの場合、同じモジュール バージョンを使用できますが、sharp のような低レベルのカーネル関数を使用する場合は使用できません。 .

Sharp の別のバージョンが必要です Docker とローカル マシンで。

おそらく、docker を使用せずにプロジェクトを実行してから、docker を使用して実行したことでしょう。

解決策 1: package.lock + node_modules フォルダーを削除して再構築し、docker のみを使用することができます。

解決策 2: (きれいではありませんが、役に立ちます)シャープを削除します package.json からダウンロードし、後でサーバーを起動するときにインストールします。たとえば、package.json を更新することにより:

package.json

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

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

2 つのイメージが異なるプラットフォームに基づいているマルチステージドッカー ファイルの問題に直面し、次のように解決しました:

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

トリックは run npm install sharp をインストールすることです 最終的なコンテナ - 私の場合、node:14 の基本イメージとは異なるのは Alpine Linux でした (明らかに異なるプラットフォームです)。 Sharp は特定のプラットフォームに直接コンパイルされるため、npm install を実行します 1 つのコンテナーでコンパイル済み/プリコンパイル済みファイルを別のコンテナーにコピーすることはできません。これは、はるかに大きい node:14 イメージ (コンテナのみを実行) にフォールバックするよりも優れたソリューションであると思います (私の場合は 1.4Gb -> 0.7Gb Alpine)。

node_modules を含む .dockeringore ファイルは、この問題の解決には役立たないことに注意してください。 CI サーバーまたはローカルホスト (OS が異なる) 上のキャッシュを使用して、プロセスの構築を高速化するだけです。

乾杯


Docker で同じエラーに直面しました。問題は、.dockerignore を含めるのを忘れていたことです。 ファイルと私の node_modules コンテナにコピーされていました。

.dockerignore を作成してみてください プロジェクトのルート (Dockerfile の隣) に次のようなファイルを作成します:

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

Linux
  1. Python.hをコンパイルできません–Websockifyのインストールエラー

  2. phpize設定エラー:ソースが見つかりません(config.m4)

  3. -lmが見つかりませんか?

  1. 16.04.3 Ltsエラーへの部分的なアップグレードでウェイクアップを作成できませんか?

  2. エラー:ld.so:オブジェクト LD_PRELOAD をプリロードできません:無視されました

  3. スクリーンキーの実行を停止する方法

  1. sudoersエラーを解決する方法–「申し訳ありませんが、sudoを実行するにはttyが必要です」

  2. Xorg を使用しようとするとエラーが発生します:コンソール ユーザーのみが X サーバーを実行できますか?

  3. エラーの取得:bash:./program:バイナリ ファイルを実行できません:Exec フォーマット エラー