Es causado por el hecho de que ejecutas docker
en una plataforma Linux y su máquina probablemente sea Mac o Windows. La mayoría de las veces puede usar las mismas versiones del módulo, pero no cuando usa funciones de kernel de bajo nivel como sharp
.
Necesita una versión diferente de Sharp en Docker y en su máquina local.
Probablemente haya ejecutado su proyecto sin docker, luego con docker.
Solución 2: (no limpia pero puede ayudar)Eliminar Sharp de su paquete.json e instálelo más tarde cuando inicie su servidor. Por ejemplo, actualizando su paquete.json:
paquete.json
{
...
"scripts": {
...
"start-docker": "yarn add sharp && nodemon index.js"
},
...
también puede hacerlo en su archivo 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"]
Enfrenté el problema con el archivo docker de varias etapas donde las dos imágenes se basan en diferentes plataformas y lo resolví así:
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"]
El truco es instalar ejecutar npm install sharp
en el contenedor final:en mi caso, Alpine Linux es diferente a la imagen base del nodo:14 (obviamente, es una plataforma diferente). Sharp se compila directamente en cierta plataforma, por lo que se ejecuta npm install
en un contenedor y copiar esos archivos compilados/precompilados a otro contenedor no puede funcionar. Supongo que esta es una solución aún mejor que recurrir al nodo:imagen 14 (solo ejecutar el contenedor) que es mucho más grande (en mi caso, 1,4 Gb -> 0,7 Gb Alpine).
Tenga en cuenta que aún debe tener el archivo .dockeringore con node_modules no lo ayudará a resolver este problema. Simplemente acelera la creación de procesos con caché en el servidor CI o en el host local (con un sistema operativo diferente).
Saludos
Enfrenté el mismo error con Docker. El problema fue que olvidé incluir un .dockerignore
archivo y mi node_modules
estaban siendo copiados en el contenedor.
Intenta crear un .dockerignore
archivo en la raíz de su proyecto (junto a su Dockerfile) con, por ejemplo:
node_modules
npm-debug.log
Dockerfile
.dockerignore
.git
.gitignore