एडीडी कमांड का उपयोग करके डॉकर में अन्य निर्देशिका के लिए निर्देशिका की प्रतिलिपि बनाएँ


382

मैंने http://docs.docker.com/engine/reference/builder/#add को पढ़ा है लेकिन मैं एक समस्या से मिला हूं। मैं स्थानीय निर्देशिका goको डॉक करने के लिए कॉपी करना चाहता हूं/user/local/

मैंने कोशिश की:

ADD go /usr/local/

तथा:

ADD /go/ /usr/local/ 

भी:

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

हालाँकि, मुझे निम्न त्रुटि संदेश दिखाई देता है, /usr/local/go/src/make.bash: No such file or directoryलेकिन स्थानीय goनिर्देशिका में है make.bash

जवाबों:


704
ADD go /usr/local/

आपके स्थानीय निर्देशिका की सामग्री को आपकी docker छवि की goनिर्देशिका में कॉपी कर देगा /usr/local/

कॉपी करने के लिए goनिर्देशिका में ही /usr/local/उपयोग करें:

ADD go /usr/local/go

या

COPY go /usr/local/go

43
मैं ADD के कई स्रोत संस्करण का उपयोग करने की कोशिश कर रहा हूं, और इसलिए मैं गंतव्य के लिए लक्ष्य निर्देशिका नाम निर्दिष्ट नहीं कर सकता। क्या ऐसा करने का एक तरीका है जो ओपी ने एक बहु-src प्रारूप में पूछा है (यानी ADDप्रत्येक स्रोत निर्देशिका के लिए एक परत बनाए बिना )?
Guss

9
मैं सिर्फ कह रही है कि द्वारा इस के लिए एक sidenote जोड़ना चाहते हैं $HOMEया ~या किसी अन्य खोल चर काम नहीं करेगा। मैं यह कह रहा हूं क्योंकि मैंने यह जानने की कोशिश में अच्छी राशि खर्च की है कि मैं यह स्वीकार करना चाहता हूं, हालांकि यह सबसे स्पष्ट रूप से स्पष्ट है।
चीख

34
कॉपी जाओ / usr / स्थानीय / जाओ मेरे लिए काम नहीं करता है। नकल नहीं होती।
18

78
यह वास्तव में काफी भ्रमित करने वाला मामला है। क्यों नहीं COPYबस की तरह व्यवहार कर सकते हैं cp? इसके बजाय एक अतिरिक्त पुलिस होने की जरूरत है कि यह कैसे काम करता है।
ज़ेल्फिर कल्टस्टाहल

14
.dockerignore फ़ाइल निर्देशिका को छुपा सकती है और COPY या ADD सूचीबद्ध वस्तुओं के लिए काम नहीं करेगी
Vereb

49

वास्तव में फ़ोल्डर की सामग्रीADD go /usr/local/ को जोड़ा जाएगा और फ़ोल्डर को स्वयं नहीं, आप थॉमसलेविल समाधान का उपयोग कर सकते हैं या यदि वह किसी कारण से काम नहीं करता है तो आप अपनी निर्देशिका को उसमें जोड़ सकते हैं जैसे:goWORKDIR/usr/local/

WORKDIR /usr/local/
COPY go go/

या

WORKDIR /usr/local/go
COPY go ./

लेकिन अगर आप कई फ़ोल्डरों को जोड़ना चाहते हैं, तो उन्हें इस तरह से जोड़ना कष्टप्रद होगा, अभी के लिए एकमात्र समाधान जैसा कि मैं अपने वर्तमान मुद्दे से देखता हूं COPY . .सभी अवांछित निर्देशिकाओं और फ़ाइलों का उपयोग कर .dockerignoreरहा हूं और कहता हूं कि मुझे फ़ोल्डर और फाइलें मिली हैं :

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

और मैं इसे जोड़ना चाहता हूं src assets package.json justforfun go:

Dockerfile में:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

.dockerignore फ़ाइल:

node_modules
headache.lock
tmp
dist

या अधिक मज़े के लिए (या आप और अधिक लोगों को भ्रमित करना पसंद करते हैं और साथ ही उन्हें पीड़ित करते हैं: पी) हो सकता है:

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

इस तरह आप सब कुछ अनदेखा कर देते हैं, लेकिन जो आप कॉपी करना चाहते हैं उसे छोड़कर या केवल "इग्नोर लिस्ट" से ही जोड़ा जाता है।

यह एक देर से जवाब है लेकिन और भी मामलों को कवर करने के लिए और अधिक तरीके जोड़ना है।


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