मेजबान फ़ाइल सिस्टम में डॉकटर कंटेनर सामग्री माउंट करें


24

मैं एक डॉकटर कंटेनर (केवल पढ़ने के लिए) की सामग्री का निरीक्षण करने में सक्षम होना चाहता हूं। ऐसा करने का एक सुरुचिपूर्ण तरीका एक निर्देशिका में कंटेनर की सामग्री को माउंट करना होगा। मैं होस्ट पर एक कंटेनर की सामग्री को माउंट करने के बारे में बात कर रहा हूं, न कि कंटेनर के अंदर होस्ट पर एक फ़ोल्डर माउंट करने के बारे में।

मैं देख सकता हूं कि अभी डोकर में दो स्टोरेज ड्राइवर हैं: aufs और btrfs। मेरे स्वयं के डॉकटर इंस्टॉल में btrfs का उपयोग होता है, और / var / lib / docker / btrfs / subvolumes के लिए ब्राउज़ करना मुझे सिस्टम पर प्रति डॉकर कंटेनर में एक निर्देशिका दिखाता है। हालांकि यह डॉकियर का कार्यान्वयन विवरण है और इन निर्देशिकाओं को कहीं और माउंट करना गलत लगता है।

क्या ऐसा करने का एक उचित तरीका है, या क्या मुझे इन प्रकार के माउंट का समर्थन करने के लिए डॉकर को पैच करना होगा?


इसे कहीं और माउंट करना गलत क्यों होगा?
माइकल हैम्पटन

1
क्योंकि भंडारण स्थान एक कार्यान्वयन विवरण है। जिस दिन डॉक एक और स्टोरेज ड्राइवर जोड़ता है, वह स्थान बदल जाएगा। मुझे इस अर्ध-स्वचालित बनाने की आवश्यकता है और उस कारण से सार्वजनिक एपीआई का उपयोग करना अच्छा होगा।
dflemstr

2
यह अपने लक्ष्यों को प्राप्त करने के लिए nsenter (या docker-enter) पर काम करने पर विचार करने के लायक हो सकता है; निश्चित रूप से कंटेनर के अंदर निरीक्षण कोड / उपकरण को रेन करने की बाधा है।
व्लादिफ्र

क्या कंटेनर सीमा पर माउंट करने के लिए लिनक्स को निर्देश देने का कोई तरीका नहीं है?
dflemstr 21

@ फ्लीट हाँ, वहाँ है, --volumes-from थोड़े करता है, यह दूसरे कंटेनर की बेस इमेज और वॉल्यूम से डायरेक्टरी के मिलन को माउंट करता प्रतीत होता है, लेकिन इस व्यवहार का दस्तावेजीकरण नहीं किया गया है
Tarnay Kámmán

जवाबों:


10

देख लेना docker export

अपने कंटेनर में फ़ाइलों को जल्दी से सूचीबद्ध करने के लिए:

docker export CONTAINER|tar -t

निर्यात करने को:

docker export CONTAINER>snapshot.tar
docker export CONTAINER|tar x PATH-IN-CONTAINER

या किसी फ़ाइल को देखने के लिए:

docker export CONTAINER|tar x --to-stdout PATH-IN-CONTAINER
# e.g. 
docker export consul|tar x --to-stdout etc/profile

Docker 1.8 cp का समर्थन करता है :

https://docs.docker.com/reference/commandline/cp/

Usage:  docker cp [options] CONTAINER:PATH LOCALPATH|-
        docker cp [options] LOCALPATH|- CONTAINER:PATH

अद्यतन: जब आप इसे चलाते हैं, तो आपको अपने docker मशीन को ssh करना चाहिए।


2
मेरी छवियां काफी बड़ी हैं (कई सौ MiB) इसलिए व्यक्तिगत फ़ाइलों को लाने के लिए ऐसा करना बहुत अधिक उपरि है। यह हर बार मल्टी-सौ-मेगाबाइट फ़ाइल बनाएगा।
dflemstr

@ डिफ्लेमस्ट्र के साथ लाइन का उपयोग करें tar x PATH-IN-CONTAINER, यह केवल उन फ़ाइलों को निकालेगा जिनकी आपको आवश्यकता है।
14

... लेकिन tarअभी भी पूरे संग्रह को डोकर डेमॉन में बनाया गया है, और इसे बनाने में कई मिनट लगते हैं ...
dflemstr

@dflemstr सुनिश्चित नहीं है कि आपका सेटअप क्या है, लेकिन docker export ubuntu|tar -t|grep etc/networkमेरे लिए 3 सेकंड का समय लगता है।
लखटक

आप शायद उसी मशीन पर चल रहे हैं जो डॉकर डेमन के रूप में है, इसलिए आपको नेटवर्क ट्रांसफर करने की आवश्यकता नहीं है, और ubuntuछवि वास्तव में छोटी है ...
dflemstr

3

आप अपने कंटेनर की वर्तमान स्थिति को एक नई छवि में बनाए रखने के लिए डॉकटर कमिट का उपयोग कर सकते हैं , और सामग्री का निरीक्षण करने के लिए इस छवि से एक इंटरैक्टिव कंटेनर शुरू कर सकते हैं।

प्रलेखन से:

एक कंटेनर की फाइल में बदलाव या नई छवि में सेटिंग्स करने के लिए यह उपयोगी हो सकता है। यह आपको एक इंटरैक्टिव शेल चलाकर, या किसी अन्य सर्वर के लिए एक काम कर रहे डेटासेट को निर्यात करने के लिए एक कंटेनर डिबग करने की अनुमति देता है।

उम्मीद है की यह मदद करेगा।


2

आप कंटेनर / नेमस्पेस के अंदर अपने निरीक्षण कार्यक्रम को चलाने के लिए nsenter का उपयोग कर सकते हैं (जो संभवतः पहले से ही कंटेनर में शामिल होना चाहिए)। लेकिन कंटेनर फाइलसिस्टम को माउंट करने के लिए जैसा कि इसके अंदर देखा गया है कि आपको मूल छवि और सभी परतों को माउंट करना होगा यदि औफ है, या डिवाइस मैपर, बट्रफ और उपयोग किए गए अन्य (भविष्य) स्टोरेज इंजन के लिए बराबर कार्रवाई, प्रत्येक मामले में अलग है। संभवतः आपके लिए काम करने वाले को और अधिक कुशल बनाना होगा, जैसा कि करना है, और कंटेनर के अंदर निरीक्षण करने के लिए nsenter का उपयोग करें।

अन्य दृष्टिकोण हैं। docker diff दिखाएगा कि उस कंटेनर में क्या फ़ाइलें बदली गईं, यदि आप यह देखना चाहते हैं कि मूल छवि में क्या था के बजाय क्या बदल गया है।

और डेटा के लिए जो लगातार और निरीक्षण योग्य होना चाहिए, संभवतः एक बेहतर पैटर्न कंटेनर में एक मात्रा में होगा, और क्या यह या तो वास्तविक फाइल सिस्टम पर, या एक शुद्ध डेटा कंटेनर में या उसी कंटेनर में रखा गया है, लेकिन कि आप निरीक्षण कार्यक्रम के साथ एक और कंटेनर लॉन्च कर सकते हैं, जो उन संस्करणों से बढ़ते हैं।


1

संपादित करें: मैंने नीचे दिए गए समाधान की कोशिश की और दुर्भाग्य से यह व्यवहार में मेरे लिए अच्छा नहीं रहा। घुड़सवार फाइलसिस्टम ने कंटेनर के फाइल सिस्टम (यहां तक ​​कि साथ cache=no) को सटीक रूप से प्रतिबिंबित नहीं किया । मुझे यकीन नहीं है कि यह एक मूलभूत समस्या है या मुझे कुछ गलत कर रहा है।

आप docker छवि में sshd इंस्टॉल कर सकते हैं और docker कंटेनर पर docker execssh सर्विस ( /usr/sbin/sshd -D) चलाने के लिए उपयोग कर सकते हैं (ध्यान दें कि docker कंटेनर के SSH पोर्ट 22 को उजागर करने की आवश्यकता है)।

फिर, docker कंटेनर docker cpकी /root/.ssh/authorized_keysनिर्देशिका के लिए अपनी सार्वजनिक ssh कुंजी कॉपी करने के लिए उपयोग करें ।

अंत में, docker inspectकंटेनर के आईपी पते को खोजने के लिए उपयोग करें और कंटेनर के फाइल सिस्टम का उपयोग करके माउंट करें

sudo sshfs -o allow_other,default_permissions,IdentityFile=/path/to/identityfile  root@xxx.xx.x.x:/ /mnt/my_container

इस काम को आराम से करने के लिए आपको एक पटकथा लिखनी होगी।

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