Copia la directory in un'altra directory nella Docker usando il comando ADD


382

Ho letto http://docs.docker.com/engine/reference/builder/#add ma ho riscontrato un problema. Voglio copiare la directory locale gonella finestra mobile/user/local/

Provai:

ADD go /usr/local/

e:

ADD /go/ /usr/local/ 

anche:

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

Tuttavia, vedo il seguente messaggio di errore /usr/local/go/src/make.bash: No such file or directoryma la godirectory locale contiene make.bash.

Risposte:


704
ADD go /usr/local/

copierà il contenuto della godirectory locale nella /usr/local/directory dell'immagine docker.

Per copiare la godirectory stessa in /usr/local/uso:

ADD go /usr/local/go

o

COPY go /usr/local/go

43
Sto cercando di utilizzare la versione di origine multipla di ADD, quindi non posso specificare il nome della directory di destinazione per la destinazione. Esiste un modo per fare ciò che l'OP ha chiesto in un formato multi-src (ovvero senza creare un ADDlayer per ciascuna directory di origine)?
Guss,

9
Voglio solo aggiungere una nota a margine a questo dicendo che $HOMEo ~o di qualsiasi altra variabile di shell non funzionerà. Lo dico perché ho speso molto cercando di capire questo di quanto vorrei ammettere, anche se è palesemente ovvio per la maggior parte.
grido

34
COPIA go / usr / local / go non funziona per me. Non copia.
Tyguy7,

78
Questa è davvero una questione piuttosto confusa. Perché non può COPYsemplicemente comportarsi come cp? Invece deve esserci una polizia extra su come funziona.
Zelphir Kaltstahl

14
Il file .dockerignore può nascondere una directory e COPY o ADD non funzioneranno per gli elementi elencati
Vereb

49

Infatti ADD go /usr/local/aggiungerà il contenuto della gocartella e non la cartella stessa, è possibile utilizzare la soluzione Thomasleveil o se ciò non ha funzionato per qualche motivo è possibile modificareWORKDIR per /usr/local/aggiungere la propria directory ad esso come:

WORKDIR /usr/local/
COPY go go/

o

WORKDIR /usr/local/go
COPY go ./

Ma se vuoi aggiungere più cartelle, sarà fastidioso aggiungerle in questo modo, l'unica soluzione per ora come la vedo dal mio problema attuale è usare COPY . .ed escludere tutte le directory e i file indesiderati .dockerignore, diciamo che ho cartelle e file :

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

e voglio aggiungere src assets package.json justforfun gocosì:

in Dockerfile:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

nel file .dockerignore:

node_modules
headache.lock
tmp
dist

O per divertirti di più (o ti piace confondere più persone anche farle soffrire: P) può essere:

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

In questo modo si ignora tutto, ma si esclude ciò che si desidera copiare o aggiungere solo da "ignora elenco".

È una risposta tardiva, ma aggiunge altri modi per fare lo stesso coprendo ancora più casi.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.