web-dev-qa-db-fra.com

COPIER un fichier dans un fichier Docker, aucun fichier ni répertoire de ce type?

J'ai un fichier Docker 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 se trouvent dans le même répertoire que mon fichier Docker et j'exécute également la commande docker build - < Dockerfile dans le même répertoire du terminal.

Qu'est-ce que je fais mal ici exactement?

28
GreenGodot

L'instruction COPY dans Dockerfile copie les fichiers de src dans le dossier dest. Il semblerait que vous manquiez les file1, file2 et file3 ou que vous tentiez de générer la Dockerfile à partir du mauvais dossier. 

Référez-vous à Dockerfile Doc

De même, la commande permettant de construire la Dockerfile devrait ressembler à quelque chose.

cd into/the/folder/
docker build -t sometagname .
9
askb

Vérifiez également le fichier .dockerignore.

Je sais que c'est un cas très rare, mais j'ai eu ce dossier mentionné.

79
swateek

Cela est peut-être dû au fait que vous faites référence à file1/file2/file3 en tant que chemin absolu qui ne se trouve 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, Docker build l’interprète comme $ {répertoire de travail de docker build}/home/votrenom/fichier1, si aucun fichier portant le même nom ici, aucune erreur de fichier ou de répertoire n’est renvoyée.

Reportez-vous à Un des problèmes de docker

14
Popeye

Semble que les commandes:

docker build -t imagename .

et: 

docker build -t imagename - < Dockerfile2

ne sont pas exécutés de la même manière. Si vous souhaitez créer 2 images de menu fixe à partir d'un même dossier avec Dockerfile et Dockerfile2, vous ne pouvez pas utiliser la commande COPY dans le deuxième exemple à l'aide de stdin (<Dockerfile2) .

docker build -t imagename -f Dockerfile2 .

COPY fonctionne alors comme prévu.

9
Tallandtree

Cela m'est arrivé lorsque j'ai essayé 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 a réussi à résoudre ce problème en spécifiant le fichier docker.

Exécuter docker build . -f docker/development/Dockerfile a fonctionné.

Toutefois, l'exécution de Runningdocker build docker/development/Dockerfile` est à l'origine de ce problème.

-f ou --file pour spécifier le nom et l'emplacement de la Dockerfile.

Cela a paru étrange au début, car lorsque j’avais la Dockerfile dans le 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.

4
A Star

Erreur de fichier introuvable avec Docker put_archive. J'utilise l'API Python pour docker. Docker version 1.12.5, build 7392c3b

docker.errors.NotFound: 404 Client Error: Not Found ("lstat /var/lib/docker/aufs/mnt/39d58e00519ba4171815ee4444f3c43d2c6a7e285102747398f6788e39ee0e87/var/lib/neo4j/certificates: no such file or directory")

Je ne parviens pas à copier des fichiers dans un conteneur de docker créé.

con = cli.create_container(...)
cli.put_archive(...)
cli.start(con['Id'])

Si je change l'ordre des opérations, il n'y a pas d'erreur et les fichiers sont copiés exactement où je les veux. Je sais donc que mon code fonctionne et que je fais ce que je veux. Mais il est important de copier les fichiers de configuration dans un conteneur avant son démarrage. Copier les fichiers après le démarrage permet au conteneur de démarrer avec une configuration par défaut et non avec la configuration personnalisée à copier avant le démarrage du conteneur. Docker prétend que ce problème est clos mais qu'il affecte toujours ma candidature.

Cela marche; Même code ordre d'exécution différent.

con = cli.create_container(...)
cli.start(con['Id'])
cli.put_archive(...)
1
metadata

Je viens d’expérimenter ce problème et aucune des suggestions ici ne résout mon problème . Il s’avère que j’ai eu les mauvaises fins de ligne dans mon fichier et que je devais les remplacer par les fins de ligne appropriées. (Dans ce cas, de CRLF à LF, Ubuntu 14.04 reconnaîtrait le script que j'avais édité sous Windows.)

J'ai changé les fins de ligne à l'aide de VSCode et la plupart des éditeurs de code devraient avoir la possibilité de choisir des fins de ligne.

J'espère que ça aide quelqu'un.

1
LiHRaM

Je me sens un peu stupide, mais le problème, c’est que j’exécutais Docker-Compose et que mon fichier Docker était situé dans un sous-répertoire ./deploy. Ma référence ADD devait être relative à la racine du projet, pas au fichier Docker.

Modifié: ADD ./file.tar.gz /etc/folder/to:.ADD ./deploy/file.tar.gz/etc/folder /

Quoi qu'il en soit, je pensais poster au cas où quelqu'un rencontrerait le même problème. 

1
fufonzo

Pour l'erreur suivante,

COPY failed: stat /<**path**> :no such file or directory

Je l'ai eu autour en redémarrant le service Docker.

Sudo service docker restart
0
Vineeth

Les appels précédents sur COPY sont peut-être en train de changer de répertoire. 

COPY ./server/package.json ./server      # this passes, but the dest ./server is considered a file

COPY ./server/dist ./server/dist         # error, ./server/dist is not a directory

Ajouter une barre oblique au premier appel

COPY ./server/package.json ./server/
0
Isaac Pak

une des façons de ne pas utiliser stdin et de garder le contexte est la suivante:

1) dans votre Dockerfile, vous devriez ajouter

ADD /your_dir_to_copy /location_in_container

2) après, vous devriez aller sur le parent de/votre_répertoire_copie

2) puis lancez cette commande

Sudo docker build . -t (image/name) -f path_of_your_dockerfile/Dockerfile

3) après avoir créé votre conteneur

docker run -ti --rm cordova bash

4) Après que votre répertoire soit copié dans votre conteneur

0
Walterwhites

Je cherchais un correctif à ce sujet et le dossier que j’étais ADD ou COPY'ing n’était pas dans le dossier de construction, plusieurs répertoires ci-dessus ou référencé depuis /

Déplacer le dossier de l'extérieur du dossier de construction dans le dossier de construction a résolu mon problème.

0
raspberry

si vous êtes sûr d'avoir fait le bon choix, mais que docker se plaint toujours, jetez un coup d'œil à ce problème: https://github.com/moby/moby/issues/27134 .
Je me suis fait avoir par le feu, et il semble que le redémarrage du moteur de docker service docker restart ne résoudra que ce problème.

0
linehrr