J'ai un Dockerfile configuré dans mon dossier racine (~). Les trois premières lignes de mon fichier ressemblent à ceci:
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
mais il renvoie l'erreur suivante pour chaque ligne:
Aucun fichier ou répertoire de ce nom
Les fichiers sont dans le même répertoire que mon Dockerfile et j'exécute également la commande docker build - < Dockerfile
dans le même répertoire dans le terminal.
Qu'est-ce que je fais de mal ici exactement?
Réponses:
L'instruction COPY dans le
Dockerfile
copie les fichiers danssrc
ledest
dossier. On dirait que vous manquez soit lafile1
,file2
etfile3
ou d' essayer de construire àDockerfile
partir du mauvais dossier.Reportez-vous à Dockerfile Doc
De plus, la commande de construction du
Dockerfile
devrait être quelque chose comme.la source
Vérifiez également le
.dockerignore
fichier.Je sais que c'est un cas très rare, mais j'avais ce dossier mentionné ici.
la source
ripgrep
le répertoire de construction), et je ne cherchais pas dans les fichiers dotfiles donc je n'ai pas vu la dernière référence embêtante à l'ancien répertoire.Cela est peut-être dû au fait que vous faites référence à fichier1 / fichier2 / fichier3 comme un chemin absolu qui n'est pas dans le contexte de construction, Docker recherche uniquement le chemin dans le contexte de construction.
Par exemple, si vous utilisez COPY / home / votrenom / fichier1, la construction Docker l'interprète comme $ {répertoire de travail de construction docker} / home / votre nom / fichier1, si aucun fichier avec le même nom ici, aucune erreur de fichier ou de répertoire n'est générée.
Reportez-vous à l' un des problèmes de docker
la source
ADD
directive, merci.Il semble que les commandes:
et:
ne sont pas exécutés de la même manière. Si vous souhaitez créer 2 images docker à partir d'un même dossier avec Dockerfile et Dockerfile2, la commande COPY ne peut pas être utilisée dans le deuxième exemple à l'aide de stdin (<Dockerfile2). Au lieu de cela, vous devez utiliser:
Ensuite, COPY fonctionne comme prévu.
la source
L'exécution a
docker build . -f docker/development/Dockerfile
fonctionné, ce qui vous permet d'exécuter votre fichier docker à partir d'un répertoire spécifié autre que la racine de votre application.Utilisez
-f
ou--file
pour spécifier le nom et l'emplacement du fichierDockerfile
.Cela m'est arrivé en essayant d'exécuter le fichier docker à partir d'un répertoire différent.
J'ai eu le
COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
et j'ai réussi à résoudre ce problème en spécifiant le fichier docker.C'est ce
docker build docker/development/Dockerfile
qui a causé ce problème pour moi.J'ai trouvé cela étrange au début, car 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 Docker de votre environnement.la source
docker build . -f docker/development/Dockerfile
ça marcheJe viens de rencontrer ce problème et aucune des suggestions ici n'a résolu mon problème. Il s'avère que j'avais les mauvaises fins de ligne dans mon fichier et j'ai dû les changer pour les fins de ligne appropriées. (Dans ce cas de CRLF à LF, donc Ubuntu 14.04 reconnaîtrait le script, que j'avais édité sous Windows.)
J'ai changé les fins de ligne en utilisant VSCode, et la plupart des éditeurs de code devraient avoir la possibilité de choisir des fins de ligne.
J'espère que cela aide quelqu'un.
la source
Je me sens un peu stupide, mais mon problème était que j'exécutais docker-compose et que mon Dockerfile était dans un sous-répertoire ./deploy. Ma référence ADD devait être relative à la racine du projet, pas au Dockerfile.
Modifié: ADD ./file.tar.gz / etc / folder / en: ADD ./deploy/file.tar.gz / etc / folder /
Quoi qu'il en soit, j'ai pensé publier au cas où quelqu'un rencontrerait le même problème.
la source
Voici la solution et la meilleure pratique:
Vous devez créer un dossier de ressources dans lequel vous pouvez conserver tous vos fichiers que vous souhaitez copier.
La commande de copie de fichiers doit être spécifiée de cette manière:
où
* resources - votre dossier local que vous avez créé dans le même dossier où Dockerfile est
* / root / folder / - dossier dans votre conteneur
la source
Pour l'erreur suivante,
Je l'ai fait en redémarrant le service docker.
la source
Erreur de fichier introuvable avec Docker put_archive. J'utilise l'API Python pour docker. Docker version 1.12.5, build 7392c3b
Je ne parviens pas à copier des fichiers dans un conteneur Docker créé.
Si je change l'ordre de fonctionnement, il n'y a pas d'erreur et les fichiers sont copiés exactement là où je les veux. Je sais donc que mon code fonctionne et fait ce que je veux qu'il fasse. Mais il est important de copier les fichiers de configuration dans un conteneur avant de le démarrer. Copier les fichiers après le démarrage oblige le conteneur à démarrer avec une configuration par défaut et non avec la configuration personnalisée qui doit être copiée avant le démarrage du conteneur. Docker prétend que ce problème est résolu mais qu'il affecte toujours mon application.
Cela marche; Ordre d'exécution différent du même code.
la source
si vous êtes sûr d'avoir fait la bonne chose, mais que docker se plaint toujours, jetez un œil à ce problème: https://github.com/moby/moby/issues/27134 .
J'ai été brûlé par cela, et il semble que le redémarrage du moteur Docker résoudra
service docker restart
simplement ce problème.la source
Je cherchais un correctif à ce sujet et le dossier que j'avais ajouté ou copié n'était pas dans le dossier de construction, plusieurs répertoires ci-dessus ou référencé à partir de /
Le déplacement du dossier de l'extérieur du dossier de construction vers le dossier de construction a résolu mon problème.
la source
l'un des moyens de ne pas utiliser stdin et de conserver le contexte est:
1) dans votre Dockerfile, vous devez ajouter
2) après, vous devriez aller sur le parent de / your_dir_to_copy dir
2) puis exécutez cette commande
3) après avoir créé votre conteneur
4) Après avoir copié votre répertoire dans votre conteneur
la source
Les appels précédents sur COPY peuvent modifier le répertoire.
Ajouter une barre oblique à la fin du premier appel
la source
Je suis tombé sur ça. La copie de certains répertoires n'a pas fonctionné. La copie des fichiers l'a fait. Il s'est avéré que les fichiers contenus dans .gitignore (pas seulement .dockerignore) sont également ignorés. Voir: https://github.com/zeit/now/issues/790
la source
.dockerignore
comme coupableJe sais que c'est vieux, mais quelque chose à souligner. Si vous pensez que tout est comme prévu, vérifiez votre fichier .gitignore :)
Vous pouvez avoir le dossier localement, mais si le dossier est dans votre git ignore, il n'est pas sur le serveur, ce qui signifie que Docker ne peut pas trouver ce dossier car il n'existe pas.
la source
Similaire et grâce à la réponse de tslegaitis , après
ça montre
En vérifiant ce journal, il indique que docker utilisera
.gitignore
:J'ai donc corrigé mon
.gitignore
(je l'utilise comme liste blanche à la place) et le docker a copié le fichier.[J'ai ajouté la réponse car je n'ai pas assez de réputation pour commenter]
la source
J'ai eu ce problème même si mon répertoire source était dans le bon contexte de construction. J'ai trouvé que la raison était que mon répertoire source était un lien symbolique vers un emplacement en dehors du contexte de construction.
Par exemple, mon Dockerfile contient les éléments suivants:
S'il
dir1
s'agit d'un lien symbolique, laCOPY
commande ne fonctionne pas dans mon cas.la source
C'est donc arrivé à quelques reprises récemment. En tant que développeur .Net, en utilisant VisualStudio, j'ai changé le nom de ma version de en
SomeThing
enSomething
tant que nom de la DLL mais cela ne change pas le fichier .csproj qui resteSomeThing.csproj
Le Dockerfile utilise des noms de fichiers Linux sensibles à la casse, de sorte que le Dockerfile nouvellement généré automatiquement essayait de copier
Something.csproj
ce qu'il ne pouvait pas trouver. Donc, renommer manuellement ce fichier (en le rendant minuscule) a tout fonctionnéMais ... voici un avertissement. Ce changement de nom de fichier sur mon ordinateur portable Windows n'est pas pris en charge par Git, donc la source du dépôt était toujours
SomeThing.csproj
sur le dépôt et pendant le processus CI / CD, la construction de Docker a échoué pour les mêmes raisons ...J'ai dû changer le nom de fichier directement en tant que commit sur le dépôt ... petite solution de contournement méchante mais m'a permis de continuer
tl; dr Si sous Windows O / S, vérifiez le respect de la casse des noms de fichiers et sachez que les noms de fichiers locaux ne sont pas pris en compte en tant que changement Git, alors assurez-vous que votre dépôt est également modifié si vous utilisez CI / CD
la source
Quelques bonnes réponses ici déjà. Ce qui a fonctionné pour moi, c'est de déplacer les commentaires à la ligne suivante.
MAUVAIS :
BON :
la source