Dans mon fichier Dockerfile, j'ai la déclaration 'COPY "suivante:
# Copy app code
COPY /srv/visitor /srv/visitor
Il va sans dire que dans mon système hôte, sous le répertoire "/ srv / visitor", il y a bien mon code source:
[root@V12 visitor]# ls /srv/visitor/
Dockerfile package.json visitor.js
Maintenant, quand j'essaie de construire une image en utilisant ce fichier Dockerfile, il se bloque à l'étape où la "COPY" est supposée se produire:
Step 10 : COPY /srv/visitor /srv/visitor
INFO[0155] srv/visitor: no such file or directory
Il est dit qu'il n'y a pas de tel répertoire, mais il y en a un.
Des idées?
MISE À JOUR 1:
On m'a fait remarquer que je me suis trompé, dans la façon dont j'ai compris le contexte de construction. La suggestion équivalait à changer la déclaration "COPY" en ceci:
COPY . /srv/visitor
Le problème est que je l'ai eu de cette façon, et le processus de construction s'est arrêté à l'étape suivante:
RUN npm install
Il dit quelque chose du genre "pas de fichier package.json trouvé", quand il y en a un.
MISE À JOUR 2:
J'ai essayé de l'exécuter avec ce changement dans le fichier Dockerfile:
COPY source /srv/visitor/
Il s’est arrêté en essayant de lancer npm:
Step 12 : RUN npm install
---> Running in ae5e2a993e11
npm ERR! install Couldn't read dependencies
npm ERR! Linux 3.18.5-1-ARCH
npm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install"
npm ERR! node v0.10.36
npm ERR! npm v2.5.0
npm ERR! path /package.json
npm ERR! code ENOPACKAGEJSON
npm ERR! errno 34
npm ERR! package.json ENOENT, open '/package.json'
npm ERR! package.json This is most likely not a problem with npm itself.
npm ERR! package.json npm can't find a package.json file in your current directory.
npm ERR! Please include the following file with any support request:
npm ERR! /npm-debug.log
INFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34
Alors, la copie a-t-elle été réalisée? Si oui, pourquoi npm est-il incapable de trouver package.json?
Réponses:
De la documentation:
Lorsque vous utilisez,
/srv/visitor
vous utilisez un chemin absolu en dehors du contexte de construction, même s'il s'agit en fait du répertoire en cours.Vous feriez mieux d'organiser votre contexte de construction de la manière suivante:
Et utilise :
Remarque:
docker build - < Dockerfile
n'a pas de contexte.D'où utilisation,
docker build .
la source
/srv/visitor
répertoire.RUN cd
mais utilisezWORKDIR
afin que le répertoire actuel soit mémorisé entre chaque étape. Un fichier docker n'est pas plus qu'un wrapper pour le docker run + docker, donc chaque étape est exécutée indépendamment du calque précédent. Cela signifie que pwd est égal/
à chaque étape si vous n'utilisez pas cette directive.Pour moi, le répertoire était dans le bon contexte, seul il était inclus dans le
.dockerignore
fichier (caché) à la racine du projet. Cela conduit au message d'erreur suivant:la source
.dockerignore
? cela m'est juste arrivé!path/to/my/file
même sipath
est dans.dockerignore
.Pour moi, le problème était que j'utilisais
docker build - < Dockerfile
De la documentation Remarque: Si vous construisez à l'aide de STDIN (
docker build - < somefile
), il n'y a pas de contexte de construction et COPY ne peut donc pas être utilisé.la source
Comme Xavier Lucas [extrêmement utile] a répondu, vous ne pouvez pas utiliser COPY ou ADD à partir d'un répertoire situé en dehors de votre contexte de construction (le dossier à partir duquel vous exécutez "docker build" doit être le même répertoire que votre fichier .Docker). Même si vous essayez d'utiliser un lien symbolique, cela ne fonctionnera pas.
Cela a fait le tour pour moi. cp -al copie la structure de répertoires et crée des liens en dur pour tous les fichiers. Lorsque vous avez terminé, exécutez "rm -rf ./src_directory" pour le supprimer.
la source
Je rencontrais ce problème et découvris que je pouvais ajouter un contexte à la variable de construction afin de charger mon (mes) fichier (s) Docker à partir d'autres répertoires. Cela m'a permis de modifier un peu plus la structure de mon fichier Docker par défaut. Voici un extrait de mon fichier docker-compose.yml:
En ajoutant le contexte, j'ai pu définir où les fichiers devaient être référencés. Vous pouvez référencer les documents Docker ici: https://docs.docker.com/compose/compose-file/#context
J'espère que cela t'aides!
la source
Pour moi, le problème était que le nom de fichier que j’ ajoutais avait un espace de fin. Un changement de nom l'a corrigé.
la source
Pour l'erreur suivante,
Je l'ai eu en redémarrant le service Docker.
la source
J'ai finalement résolu ce problème dans mon cas si Dockerfile qui exécute la copie était à un niveau plus profond du projet. J'ai donc réalisé que le chemin de génération de l'hôte est exprimé par rapport à l'emplacement du fichier Dockerfile.
la source
Cela m'est arrivé lorsque j'ai essayé d'exécuter le fichier docker à partir d'un répertoire différent.
J'ai eu
COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
et réussi à résoudre ce problème en spécifiant le fichier docker.Courir a
docker build . -f docker/development/Dockerfile
fonctionné.Mais en cours d' exécution
Running
build docker docker / développement / Dockerfile` a causé ce problème.-f
ou--file
pour spécifier le nom et l'emplacement du fichierDockerfile
.Cela a paru étrange au début parce que, lorsque j’avais le
Dockerfile
répertoire racine des applications, cela fonctionnait bien. Cela vous aidera si vous souhaitez gérer un peu mieux les fichiers de votre environnement de travail.la source
Non seulement le fichier doit se trouver dans un répertoire du contexte de construction actuel, mais il ne peut pas non plus être un lien symbolique vers un fichier situé en dehors du contexte de construction.
J'avais un lien vers un fichier dans mon répertoire personnel et le lien se trouvait dans le répertoire du projet. Après avoir supprimé le lien et déplacé le fichier lié dans le projet (
rm mylink ; mv ~/myrealfile ./
), cela a fonctionné.la source
Pour moi, c'était un problème avec le SDK Google Cloud:
https://code.google.com/p/google-cloud-sdk/issues/detail?id=1431
la source