Dockerfile kopya koruma alt dizin yapısı


257

Yerel dosyadan bir docker görüntü oluşturma bir dizi dosya ve klasör kopyalamaya çalışıyorum.

Dosyalar şöyle:

folder1
    file1
    file2
folder2
    file1
    file2

Kopyayı şu şekilde yapmaya çalışıyorum:

COPY files/* /files/

Ancak, tüm dosyalar / files / dizinine yerleştirilir, Docker'da alt dizin yapısını korumanın yanı sıra dosyaları dizinlerine kopyalamanın bir yolu var mı?


1
Hangi sonucu aldığınızı ve hangi sonucu beklediğinizi açıklığa kavuşturabilir misiniz?
Thomasleveil

Yanıtlar:


413

Bu Dockerfile ile yıldızı COPY'den kaldırın:

FROM ubuntu
COPY files/ /files/
RUN ls -la /files/*

Yapısı var:

$ docker build .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu
 ---> d0955f21bf24
Step 1 : COPY files/ /files/
 ---> 5cc4ae8708a6
Removing intermediate container c6f7f7ec8ccf
Step 2 : RUN ls -la /files/*
 ---> Running in 08ab9a1e042f
/files/folder1:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2

/files/folder2:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2
 ---> 03ff0a5d0e4b
Removing intermediate container 08ab9a1e042f
Successfully built 03ff0a5d0e4b

64
Peki ya sadece gibi dosyalara ihtiyacım olursa COPY files/*1 /files/?
Pavel Agarkov

1
Bu aynı zamanda o dizindeki mevcut dosyaların üzerine yazacak mı?
Ocak'ta

1
@chander, evet, mevcut dosyaların üzerine yazılacak
ISanych

4
Buradaki gizli sosun ONE kaynak dizini ve ONE hedef dizinin belirtildiğini belirtmek önemlidir. Diğer tüm kombinasyonlar kaynak dizininin / dizinlerin içeriğini hedef dizine kopyalar.
Marcin

RUN ls -la /files/*Doğrudan konsol çıktısından çıktısını göremedim docker build. Bu yüzden bunun yerine lsdoğrudan ana bilgisayar üzerinde yapmak için konteynere ssh gittim ,docker exec -it <container name> /bin/bash
somenickname

32

Alternatif olarak bir "." * yerine çalışma dizinindeki tüm dosyaları alacağından klasörleri ve alt klasörleri ekleyin:

FROM ubuntu
COPY . /
RUN ls -la /

1
.git 'dizini gibi gizli dosyaları ve dizinleri içerecek mi?
Bruno Negrão Zica

7
@ BrunoNegrãoZica, kopyalama işlemi sırasında hangi dosya / klasörlerin yoksayılmasını istediğinizi belirtmek için .dockerignore dosyasını kullanabilirsiniz. Geç oldu, ama başka biri için yararlı olacağını umuyoruz
Hellaren

22

To birleştirme bir görüntü içinde bir dizine yerel bir dizin, bunu. Görüntüde zaten mevcut olan dosyaları silmez. Yalnızca yerel olarak mevcut olan dosyaları ekler, aynı ada sahip bir dosya zaten varsa görüntüdeki dosyaların üzerine yazar.

COPY ./files/. /files/
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.