web-dev-qa-db-fra.com

Erreur Docker: aucun fichier ou répertoire de ce type, ouvrez '/package.json'

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.

2
norbjd

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