J'essaie d'exécuter une image de nœud à l'intérieur de docker, mais j'ai l'erreur suivante:
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#2 No description
npm WARN !invalid#2 No repository field.
npm WARN !invalid#2 No README data
npm WARN !invalid#2 No license field.
Voici mon fichier docker. Je veux mettre tous mes fichiers de projet dans/home/app/dossier dans le conteneur:
# Use an official node runtime as a parent image
FROM node:10
# Set the working directory to /home/app
#WORKDIR /home/app/
# Bundle app source
COPY . /home/app/
# If you are building your code for production
# RUN npm install --only=production
RUN npm install
# Make port 8000 available to the world outside this container
EXPOSE 8000
CMD npm run dev
Je suis sur Windows et j'utilise hyper-V. Mon package.json est au même niveau que mon fichier Docker.
Des idées?
Merci
Lorsque la commande npm install
est exécutée, le répertoire de travail est probablement /
et il n'y a pas package.json
ici.
Décommentez simplement votre ligne WORKDIR /home/app/
dans votre Dockerfile
.
Clairement, le problème ici est que npm
ne trouve pas le fichier package.json
.
Alors, pourquoi ça?
L'image node:10
ou node:Alpine
prendra un instantané du système de fichiers composé de bin
, dev
, etc
, home
et proc
et le placera dans un conteneur temporaire. Avez-vous remarqué qu'aucun des fichiers susmentionnés n'est package.json
? Il n'existe pas à l'intérieur du conteneur.
Donc, il y a le conteneur qui contient un segment de votre disque dur, comme mentionné ci-dessus, puis le reste de votre disque dur et où votre fichier package.json
est assis et qui n'est pas communiqué à votre conteneur.
Lorsque vous créez une image, aucun des fichiers du répertoire de votre projet n'est disponible dans votre conteneur. Vous ne pouvez pas supposer que l’un de ces fichiers est disponible à moins que vous ne le permettiez expressément dans votre Dockerfile
.
Ajoutez une ligne de configuration pour vous assurer que votre fichier package.json
est disponible dans le conteneur lorsque vous essayez d'exécuter la commande npm install
de la manière suivante:
# Specify base image
FROM node:Alpine
# Install some dependencies
COPY ./ ./
RUN npm install
# Setup default command
CMD ["npm", "start"]