web-dev-qa-db-fra.com

Copier le répertoire dans un autre répertoire dans Docker à l'aide de la commande ADD

J'ai lu http://docs.docker.com/engine/reference/builder/#add mais j'ai rencontré un problème. Je veux copier le répertoire local go dans le menu fixe /user/local/

J'ai essayé:

ADD go /usr/local/

et:

ADD /go/ /usr/local/ 

aussi:

RUN chmod 0755 /usr/local/go/src/make.bash

Cependant, je vois le message d'erreur suivant /usr/local/go/src/make.bash: No such file or directory, mais le répertoire local go contient make.bash.

291
pengwang
ADD go /usr/local/

copie le conten de votre répertoire local go dans le répertoire /usr/local/ de votre image de menu fixe.

Pour copier le répertoire go lui-même dans /usr/local/, utilisez:

ADD go /usr/local/go

ou

COPY go /usr/local/go
557
Thomasleveil

En effet, ADD go /usr/local/ ajoutera conten du dossier go et non le dossier lui-même, vous pouvez utiliser la solution Thomasleveil ou, si cela ne fonctionne pas pour une raison quelconque, vous pouvez modifier WORKDIR en /usr/local/ alors ajoutez-y votre répertoire comme ceci:

WORKDIR /usr/local/
COPY go go/

ou

WORKDIR /usr/local/go
COPY go ./

Mais si vous voulez ajouter plusieurs dossiers, il sera ennuyeux de les ajouter comme ça, la seule solution pour le moment, comme je le vois de mon numéro actuel, consiste à utiliser COPY . . et à exclure tous les éléments indésirables. répertoires et fichiers dans .dockerignore, supposons que j'ai des dossiers et des fichiers:

src 
tmp 
dist 
assets 
go 
justforfun 
node_modules 
scripts 
.dockerignore 
Dockerfile 
headache.lock 
package.json 

et je veux ajouter src assets package.json justforfun go donc:

dans Dockerfile:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

dans le fichier .dockerignore:

node_modules
headache.lock
tmp
dist

Ou pour plus de plaisir (ou si vous aimez troubler plus de gens les font aussi souffrir: P) peut être:

*
!src 
!assets 
!go 
!justforfun 
!scripts 
!package.json 

De cette façon, vous ignorez tout, mais excluez ce que vous voulez copier ou ajouter uniquement à partir de "ignorer la liste".

C'est une réponse tardive, mais en ajoutant plus de façons de faire la même chose couvrant encore plus de cas.

19
Al-Mothafar

Vous pouvez utiliser COPY. Vous devez spécifier explicitement le répertoire. Il ne sera pas créé par lui-même

COPY go /usr/local/go

Référence: référence du Docker CP

7
Amstel D'Almeida