डॉकटर कम्पोज़ के साथ एक कंटेनर में फाइल कॉपी करना


100

मेरे पास एक Dockerfileकंटेनर है जहाँ मैं एक मौजूदा निर्देशिका (सामग्री के साथ) को कॉपी करता हूँ जो ठीक काम करता है:

Dockerfile

FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/

RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html 
RUN chmod -R 755 /var/www/html 

डोकर निष्पादन के साथ निर्देशिका लिस्टिंग का स्क्रीनशॉट

लेकिन जब मैं एक docker-compose.ymlफ़ाइल का उपयोग करता हूं तो केवल निर्देशिका होती है aw3somevideoऔर अंदर aw3somevideoकुछ भी नहीं होता है।

docker-compose.yml :

 php:
    build: php/
    volumes:
      - ./Frontend/ :/var/www/html/
      - ./Frontend/index.php :/var/www/html/
    ports:
      - 8100:80

खाली निर्देशिका सूची का स्क्रीनशॉट

हो सकता है कि मुझे इसके फंक्शन की समझ नहीं है volumesऔर अगर ऐसा है तो कृपया मुझे बताएं कि अपनी मौजूदा फाइलों को एक docker-compose.ymlफाइल के जरिए कंटेनर में कैसे कॉपी करें ।


5
volumes:अपने डॉकटर-कम्पोज़ फ़ाइल से अपना खंड निकालें । आपकी छवि में पहले से ही डेटा है। वॉल्यूम: अनुभाग केवल डेटा को अधिलेखित करता है। वर्तमान डॉकटर-कम्पोज़ प्रारूप (संस्करण 2) में भी जाएँ।
बर्नार्ड

@Alkaline thx कि वास्तव में समस्या थी। लेकिन संस्करणों ने पूरी निर्देशिका की नकल क्यों नहीं की?
TheDoctor

मैं एक उत्तर के रूप में उत्तर दूंगा ताकि आप इस मुद्दे को बंद करें।
बर्नार्ड

जवाबों:


89

दिया हुआ

    volumes:
      - /dir/on/host:/var/www/html

यदि /dir/on/hostमौजूद नहीं है, तो यह मेजबान पर बनाया गया है और खाली सामग्री कंटेनर में रखी गई है /var/www/html/var/www/htmlकंटेनर के अंदर आपके पास पहले जो भी सामग्री थी वह दुर्गम है, जब तक आप वॉल्यूम को अनमाउंट नहीं करते हैं; नया माउंट पुरानी सामग्री छिपा रहा है।


क्या यह संभव है, कि हाल के डॉक संस्करणों के साथ सामग्री की var/www/html/प्रतिलिपि /dir/on/hostतब भी नहीं है जब वह मौजूद नहीं है? क्या पहली बार कंटेनर को होस्ट करते समय होस्ट करने वाले डॉकटर-कन्टेनर के भीतर से डेटा को जबरदस्ती कॉपी करने का कोई तरीका है?
टेरेटर

1
@Tarator हाँ वास्तव में, दाहिने हाथ की ओर अब मेजबान को कॉपी नहीं किया गया है। मैं जवाब अपडेट कर दूंगा। कंटेनर स्टार्ट पर कॉपी करने के तरीके के रूप में, आप स्टार्टअप कमांड को कुछ इस तरह से ओवरराइड कर सकते हैं docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"execअंतिम आदेश को लागू करने के लिए उपयोग करना न भूलें ताकि इसे PID1 सौंपा जाए। यह सुनिश्चित करेगा कि myapp को समाप्ति संकेत (उदाहरण के लिए Ctrl-C) प्राप्त होगा।
बर्नार्ड

नमस्ते, मैं भी डॉकटर-कम्पोज़ के साथ एक ही बात कर रहा हूं, लेकिन एक त्रुटि हो रही है, क्या आप कृपया इस पर एक नज़र डाल सकते हैं ... stackoverflow.com/questions/45573831/…
utkarsh31

अरे, बर्नार्ड, आप अपने जवाब में " दाहिने हाथ की ओर myvolume की तरह एक नामित मात्रा या मेजबान पर एक पथ निर्दिष्ट करता है " का उल्लेख करते हैं । क्या आपका मतलब वहां "लेफ्ट हैंड" नहीं था, क्योंकि जहाँ एक वॉल्यूम या होस्ट पाथ होता है, जो फिर कंटेनर की जगह पर मैप किया जाता है? मुझे लगता है कि आप इस बारे में बात कर रहे हैं कि कैसे डॉकटर बाएं और दाएं के बीच फाइल कॉपी का प्रबंधन कर सकता है, और यह कैसे बदल जाता है।
चार्ली मेहरट

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