สำเนา Dockerfile เก็บโครงสร้างไดเรกทอรีย่อย


257

ฉันพยายามที่จะคัดลอกไฟล์และโฟลเดอร์จำนวนมากไปยังรูปภาพของนักสร้างท่าจาก localhost ของฉัน

ไฟล์เป็นดังนี้:

folder1
    file1
    file2
folder2
    file1
    file2

ฉันพยายามทำสำเนาเช่นนี้:

COPY files/* /files/

อย่างไรก็ตามไฟล์ทั้งหมดจะอยู่ใน / files / มีวิธีใดบ้างใน Docker เพื่อรักษาโครงสร้างไดเรกทอรีย่อยรวมทั้งคัดลอกไฟล์ไปยังไดเรกทอรีของพวกเขา


1
คุณสามารถอธิบายสิ่งที่คุณได้รับและสิ่งที่คาดหวังผล?
Thomasleveil

คำตอบ:


413

ลบดาวออกจาก COPY ด้วย Dockerfile นี้:

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

มีโครงสร้าง:

$ 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
แต่ถ้าฉันต้องการไฟล์บางไฟล์COPY files/*1 /files/ล่ะ
Pavel Agarkov

1
สิ่งนี้จะเขียนทับไฟล์ที่มีอยู่ในไดเรกทอรีนั้นหรือไม่
สวดมนต์

1
@chander, ใช่, ไฟล์ที่มีอยู่จะถูกเขียนทับ
ISanych

4
สิ่งสำคัญที่ควรทราบคือซอสลับคือที่นี่มีไดเรกทอรีแหล่งที่มาหนึ่งแหล่งและระบุไดเรกทอรีเป้าหมายหนึ่งแห่ง ชุดค่าผสมอื่น ๆ จะคัดลอกเนื้อหาของไดเรกทอรีต้นทาง (IES) ไปยังไดเรกทอรีเป้าหมาย
Marcin

ผมไม่สามารถที่จะเห็นการส่งออกของโดยตรงจากการส่งออกของคอนโซลRUN ls -la /files/* docker buildดังนั้นฉันจึงไปที่ภาชนะโดยตรงเพื่อทำlsโดยตรงกับโฮสต์แทนด้วยdocker exec -it <container name> /bin/bash
somenickname

32

หรือคุณสามารถใช้ "." แทนที่จะเป็น * เนื่องจากจะใช้ไฟล์ทั้งหมดในไดเรกทอรีทำงานรวมถึงโฟลเดอร์และโฟลเดอร์ย่อย:

FROM ubuntu
COPY . /
RUN ls -la /

1
จะรวมถึงไฟล์ที่ซ่อนอยู่และ dirs เช่นไดเรกทอรี '.git' หรือไม่
Bruno Negrão Zica

7
@ BrunoNegrãoZicaคุณสามารถใช้ไฟล์. dockerignore เพื่อระบุไฟล์ / โฟลเดอร์ที่คุณต้องการละเว้นระหว่างการคัดลอก มันสาย แต่หวังว่ามันจะเป็นประโยชน์สำหรับคนอื่น
Hellaren

22

ในการรวมโลคัลไดเร็กทอรีเข้ากับไดเร็กทอรีภายในอิมเมจให้ทำเช่นนี้ มันจะไม่ลบไฟล์ที่มีอยู่แล้วในภาพ มันจะเพิ่มเฉพาะไฟล์ที่มีอยู่ในเครื่องเขียนทับไฟล์ในภาพหากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้ว

COPY ./files/. /files/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.