ADD komutunu kullanarak dizini Docker'daki başka bir dizine kopyala


382

Http://docs.docker.com/engine/reference/builder/#add adresini okudum ancak bir sorunla karşılaştım. Yerel dizini godocker'a kopyalamak istiyorum/user/local/

Denedim:

ADD go /usr/local/

ve:

ADD /go/ /usr/local/ 

Ayrıca:

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

Ancak, aşağıdaki hata iletisini görüyorum, /usr/local/go/src/make.bash: No such file or directoryancak yerel godizin içeriyor make.bash.

Yanıtlar:


704
ADD go /usr/local/

yerel dizininizin içeriğini docker görüntünüzün dizinine kopyalar .go/usr/local/

Kullanılan godizinin kendisini kopyalamak için /usr/local/:

ADD go /usr/local/go

veya

COPY go /usr/local/go

43
ADD'nin birden çok kaynak sürümünü kullanmaya çalışıyorum ve bu nedenle hedef için hedef dizin adını belirleyemiyorum. OP'nin çok src formatında sorduğunu yapmanın bir yolu var mı (yani ADDher kaynak dizini için bir katman oluşturmadan )?
Guss

9
Ben sadece bu $HOMEveya ~başka bir kabuk değişkeni işe yaramaz diyerek buna bir sidenote eklemek istiyorum . Bunu söylüyorum, çünkü bunu anlamaya çalıştığımdan anlamaya çalışıyorum, çoğu için göze batan açık olsa da.
shriek

34
COPY go / usr / local / go benim için çalışmıyor. Kopyalamıyor.
Tyguy7

78
Bu gerçekten kafa karıştırıcı bir konudur. Neden COPYböyle davranamıyorsun cp? Bunun yerine, nasıl çalıştığı konusunda fazladan bir polis olması gerekir.
Zelphir Kaltstahl

14
.dockerignore dosyası bir dizini gizleyebilir ve listelenen öğeler için COPY veya ADD çalışmaz
Vereb

49

Nitekim ADD go /usr/local/katacak içeriği arasında goklasörde değil klasörün kendisi, sen Thomasleveil çözümü kullanabilirsiniz veya herhangi bir nedenle işi olmasaydı değiştirebileceğiniz WORKDIRiçin /usr/local/o gibi ona da dizin ekleyin:

WORKDIR /usr/local/
COPY go go/

veya

WORKDIR /usr/local/go
COPY go ./

Ancak , birden fazla klasör eklemek istiyorsanız , bunları eklemek böyle can sıkıcı olacaktır, şimdilik şu anki sorunumdan gördüğüm tek çözüm kullanmak COPY . .ve tüm istenmeyen dizinleri ve dosyaları hariç tutmak .dockerignore, diyelim ki klasör ve dosyalar var :

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

ve ben eklemek istiyorum src assets package.json justforfun go:

Dockerfile içinde:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

.dockerignore dosyasında:

node_modules
headache.lock
tmp
dist

Ya da daha fazla eğlence için (ya da daha fazla insanın acı çekmesini sağlamayı karıştırmak isterseniz: P) şunlar olabilir:

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

Bu şekilde her şeyi yok sayarsınız, ancak kopyalanmasını veya yalnızca "yoksayılanlar listesinden" eklenmesini istediklerinizi hariç tutarsınız.

Bu geç bir cevap ama aynı şeyi daha fazla vakayı kapsayan daha fazla yol eklemek


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.