Ini disebabkan oleh fakta bahwa Anda menjalankan docker
pada platform Linux dan mesin Anda mungkin mac atau windows. Sebagian besar waktu Anda dapat menggunakan versi modul yang sama tetapi tidak ketika menggunakan fungsi kernel tingkat rendah seperti sharp
.
Anda memerlukan versi Sharp yang berbeda di Docker dan di mesin lokal Anda.
Anda mungkin telah menjalankan proyek Anda tanpa buruh pelabuhan, lalu dengan buruh pelabuhan.
Solusi 1: Anda dapat menghapus folder package.lock + node_modules lalu membangun kembali dan sekarang hanya menggunakan docker.
Solusi 2: (tidak bersih tapi bisa membantu) Hapus Sharp dari Anda package.json dan instal nanti ketika Anda memulai server Anda. Misalnya dengan memperbarui package.json Anda:
paket.json
{
...
"scripts": {
...
"start-docker": "yarn add sharp && nodemon index.js"
},
...
Anda juga dapat melakukannya di file Dockerfile Anda:
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"]
Saya menghadapi masalah dengan file buruh pelabuhan multi-tahap di mana kedua imagse didasarkan pada platform yang berbeda dan saya menyelesaikannya seperti ini:
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"]
Caranya install run npm install sharp
dalam wadah terakhir - dalam kasus saya itu adalah Alpine linux yang berbeda dari gambar dasar node:14 (jelas ini adalah platform yang berbeda). Sharp dikompilasi langsung ke platform tertentu sehingga menjalankan npm install
dalam satu wadah dan salin file yang dikompilasi / dikompilasi ke wadah lain tidak dapat berfungsi. Saya menganggap ini masih solusi yang lebih baik daripada fallback ke gambar node:14 (hanya menjalankan container) yang jauh lebih besar (dalam kasus saya 1,4Gb -> 0,7Gb Alpine).
Ingatlah bahwa Anda masih harus memiliki file .dockeringore dengan node_modules tidak akan membantu Anda menyelesaikan masalah ini. Ini hanya mempercepat pembangunan proses dengan cache di server CI atau di localhost (dengan OS berbeda).
Salam
Saya menghadapi kesalahan yang sama dengan Docker. Masalahnya adalah saya lupa menyertakan .dockerignore
file dan node_modules
saya sedang disalin ke dalam penampung.
Coba buat .dockerignore
file di root proyek Anda (di sebelah Dockerfile Anda) dengan mis.:
node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
.gitignore