web-dev-qa-db-fra.com

Comment copier un fichier d'un hôte à un conteneur à l'aide de Dockerfile

J'ai écrit un fichier Dockerfile qui ressemble à ceci

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y wget

Maintenant, j'ai un fichier appelé abc.txt dans mon ordinateur hôte. Comment puis-je le copier dans ce conteneur. Y at-il une étape que je peux ajouter dans Dockerfile et qui copie d’hôte en conteneur.

38
Sasikiran Vaddi

Utilisez la commande COPY comme ceci:

COPY foo.txt /data/foo.txt
# where foo.txt is the relative path on Host
# and /data/foo.txt is the absolute path in the image

lire plus de détails pour COPY dans le documentation officielle

Une alternative serait d'utiliser ADD mais ce n'est pas la meilleure pratique si vous ne souhaitez pas utiliser certaines fonctionnalités avancées d'ADD telles que la décompression de fichiers tar.gz.Si vous souhaitez toujours utiliser la commande ADD, procédez comme suit:

ADD abc.txt /data/abc.txt
# where abc.txt is the relative path on Host
# and /data/abc.txt is the absolute path in the image

pour plus de détails sur ADD, consultez la documentation officielle

58
george.yord

Pour ceux qui ont cette erreur (terriblement pas claire):

Échec de la copie: stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt: aucun fichier ou répertoire de ce type

Il pourrait y avoir des tas de raisons, notamment:

  • Pour les utilisateurs docker-compos, rappelez-vous que le fichier docker-compose.yml context écrase le contexte du fichier Dockerfile. Vos instructions COPY doivent maintenant suivre un chemin relatif à ce qui est défini dans docker-compose.yml plutôt qu’à votre fichier Docker.
  • Commentaires de fin ou un point-virgule sur la ligne COPY: COPY abc.txt /app #This won't work
  • Le fichier est dans un répertoire ignoré par les fichiers .dockerignore ou .gitignore (méfiez-vous des caractères génériques)
  • Vous avez fait une faute de frappe

Parfois, WORKDIR /abc suivi de COPY . xyz/ fonctionne là où COPY /abc xyz/ échoue, mais c'est un peu moche.

3
Overleaf
2
user2915097

J'ai fait face à ce problème, je ne pouvais pas copier le répertoire zeppelin [1GB] dans un conteneur docker et je rencontrais un problème. 

COPY a échoué: stat /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all: no tel fichier ou répertoire

J'utilise docker Version: 17.09.0-ce et j'ai résolu le problème en procédant comme suit.

Étape 1: copiez le répertoire zeppelin [que je veux copier dans le paquet Docker] dans le répertoire contenant "Dockfile" 

Étape 2: éditez le fichier Dock et ajoutez la commande [emplacement où vous souhaitez copier] ADD ./zeppelin-0.7.2-bin-all/usr/local / 

Étape 3: allez dans le répertoire qui contient DockFile et exécutez la commande [alternatives également disponibles] docker build

Étape 4: image de menu fixe créée avec succès avec les journaux

Étape 5/9: AJOUTER ./zeppelin-0.7.2-bin-all /usr/local/ ---> 3691c902d9fe

Etape 6/9: WORKDIR $ ZEPPELIN_HOME ---> 3adacfb024d8 .... Construit avec succès b67b9ea09f02

1
Rajeev Rathor