web-dev-qa-db-fra.com

COPY package.json - Dockerfile

J'ai fait un Dockerfile à un projet dans Node.js mais une erreur s'est produite.

Voici le fichier Dockerfile:

FROM node:latest
RUN npm install nodemon -g
WORKDIR ./app
COPY package.json ./app
RUN npm install -g
COPY server.js ./app
EXPOSE 3000
CMD ["npm", "start"] 

Lorsque j'ai essayé de construire ce fichier Dockerfile, une erreur comme celle-ci se produit:

Step 4/8 : COPY package.json ./app
COPY failed: stat /var/lib/docker/tmp/docker-builderXXXXXXXX/package.json: no such file or directory

Comment puis-je le réparer?

Docker version 17.12.0

Ma suggestion, déplacez tous les fichiers vers la WORKDIR au lieu d'exécuter votre npm install

FROM node:latest
RUN npm install nodemon -g
WORKDIR /app
ADD . /app
RUN npm install
EXPOSE 3000
CMD ["npm", "start"] 
1
ferbass

Assurez-vous que les fichiers package.json et server.js se trouvent dans le même répertoire que votre fichier Docker et que cela devrait fonctionner. 

Lorsque vous créez une image de menu fixe, tout le contenu du répertoire devient votre contexte de construction de menu fixe et ce dernier trouve les fichiers que vous copiez ou ajoutez à partir de là.

Vous voudrez peut-être parfois empêcher certains de ces fichiers d'être envoyés au contexte de construction, auquel cas vous utilisez le fichier .dockerignore pour spécifier ces fichiers. Bonne chance!

0

Ne jamais exécuter nodemon en production (si c'est ce que vous avez essayé de faire). Vous devez configurer votre restart au cas où l'application se bloquerait. De préférence, définissez-le sur always dans docker-compose.yml

La meilleure façon de structurer Dockerfile dans votre cas: 

FROM node:latest
WORKDIR ./app
# please note, you already declared a WORKDIR, 
# therefore your files will be automaticaly pushed to ./app
COPY package.json ./
RUN npm install -g
COPY ./ ./ 
EXPOSE 3000
CMD ["npm", "start"]

J'espère que cela pourra aider. 

0
Sgryt87