Dockerfile प्रतिलिपि उपनिर्देशिका संरचना रखें


257

मैं अपने लोकलहोस्ट से डॉकटर इमेज बनाने के लिए कई फाइलों और फ़ोल्डरों को कॉपी करने की कोशिश कर रहा हूं।

फाइलें इस प्रकार हैं:

folder1
    file1
    file2
folder2
    file1
    file2

मैं इस तरह से प्रतिलिपि बनाने की कोशिश कर रहा हूं:

COPY files/* /files/

हालाँकि, सभी फ़ाइलों को / फ़ाइलों में रखा गया है / क्या डॉकर में उपनिर्देशिका संरचना रखने के साथ-साथ फाइलों को उनकी निर्देशिकाओं में कॉपी करने का एक तरीका है?


1
क्या आप स्पष्ट कर सकते हैं कि आपको क्या परिणाम मिला और आप किस परिणाम की उम्मीद करते हैं?
थॉमसलेविल

जवाबों:


413

इस Dockerfile के साथ COPY से स्टार निकालें:

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/?
पावेल अग्रकोव

1
क्या यह उस निर्देशिका में मौजूदा फ़ाइलों को भी अधिलेखित करेगा?
चंदर

1
@ चंद्र, हां, मौजूदा फाइलें अधिलेखित कर दी जाएंगी
ISanych

4
यह ध्यान रखना महत्वपूर्ण है कि यहां गुप्त सॉस यह है कि वन स्रोत निर्देशिका है, और वन लक्ष्य निर्देशिका निर्दिष्ट है। कोई अन्य संयोजन स्रोत निर्देशिका (ies) की सामग्री को लक्ष्य निर्देशिका में कॉपी करता है।
मार्सिन

मैं RUN ls -la /files/*सीधे कंसोल आउटपुट से आउटपुट नहीं देख पा रहा था docker build। इसलिए मैं इसके बजाय सीधे lsसीधे मेजबान पर करने के लिए कंटेनर में गया,docker exec -it <container name> /bin/bash
somenickname

32

वैकल्पिक रूप से आप "a" का उपयोग कर सकते हैं। * के बजाय, क्योंकि यह सभी फाइलों को वर्किंग डायरेक्टरी में ले जाएगा, जिसमें फ़ोल्डर्स और सबफ़ोल्डर शामिल होंगे:

FROM ubuntu
COPY . /
RUN ls -la /

1
जिसमें '.गित' निर्देशिका की तरह छिपी हुई फाइलें और डायर शामिल होंगे?
ब्रूनो नेग्रो ज़िका

7
@ BrunoNegrãoZica, आप का उपयोग कर सकते हैं .dockerignore फ़ाइल को निर्दिष्ट करने के लिए कि आप किन फ़ाइलों / फ़ोल्डरों को कॉपी ऑपरेशन के दौरान अनदेखा करना चाहेंगे। यह देर हो चुकी है, लेकिन उम्मीद है कि यह किसी और के लिए उपयोगी होगा
हेलरन

22

एक छवि के भीतर एक स्थानीय निर्देशिका को एक निर्देशिका में विलय करने के लिए , यह करें। यह छवि के भीतर पहले से मौजूद फ़ाइलों को नहीं हटाएगा। यह केवल उन फ़ाइलों को जोड़ेगा जो स्थानीय रूप से मौजूद हैं, छवि में फ़ाइलों को अधिलेखित करें यदि उसी नाम की कोई फ़ाइल पहले से मौजूद है।

COPY ./files/. /files/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.