डॉकटर छवि सामग्री कैसे देखें


294

मैंने एक डॉकटर पुल किया और उस छवि को सूचीबद्ध कर सकता है जिसे डाउनलोड किया गया है। मैं इस छवि की सामग्री देखना चाहता हूं। नेट पर सर्च किया लेकिन कोई सीधा जवाब नहीं मिला।



10
कोई ठग नहीं। कंटेनर और छवि को देखना एक ही बात नहीं है। आप आरंभिक फाइलसिस्टम को देखना चाहते हैं या मान्य करना चाहते हैं कि छवि के अंदर कुछ भी दुर्भावनापूर्ण नहीं है इससे पहले कि उसे चलाने का मौका मिले।
कीलरोन

4
यदि आप छवि को कंटेनर के रूप में नहीं चला सकते हैं तो आप ड्राइव ( github.com/wagoodman/dive ) जैसे उपकरण का उपयोग कर सकते हैं या आप छवि को निर्यात करने के लिए docker save का उपयोग कर सकते हैं। फिर आप टार का पता लगा सकते हैं या गोता लगाने के साथ आप छवि का पता लगा सकते हैं।
फनटॉमस 424242

कोई
ठग

जवाबों:


374

आप बस उस छवि का उपयोग करके एक इंटरेक्टिव शेल कंटेनर चला सकते हैं और उस छवि को जो भी सामग्री है, उसका पता लगा सकते हैं।

उदाहरण के लिए:

docker run -it image_name sh

या एक के साथ छवियों के लिए निम्नलिखित entrypoint

docker run -it --entrypoint sh image_name

या, यदि आप यह देखना चाहते हैं कि चित्र कैसे बनाया गया था Dockerfile, तो इसके चरणों का अर्थ है :

docker image history --no-trunc image_name > image_history

चरणों को image_historyफ़ाइल में लॉग इन किया जाएगा ।


1
धन्यवाद। पहले एक मैं देख रहा हूं। मूल रूप से फ़ोल्डरों का पता लगाएं।
पाइलर

9
मैं एक छवि की सामग्री को देखने की कोशिश कर रहा हूं जो "FROM खरोंच" का उपयोग करके बनाई गई है और कोई शेल उपलब्ध नहीं है। क्या सामग्री को देखने का कोई अन्य तरीका है? मैं जो चित्र देखने का प्रयास कर रहा हूँ वह पोर्टेनेर / पोर्टेनेर है।
जुआन हर्नांडेज़

2
क्या यह संभव है कि कोई व्यक्ति कंटेनर में बिना स्पॉन के छवि की सामग्री को देखे? या क्या हम यह मान सकते हैं कि यह तब तक सुरक्षित है जब तक कि उसके पास एक कंटेनर को रखने का अधिकार नहीं है?
शबीरमैन

3
"एंट्रीपॉइंट के साथ एक विंडोज कंटेनर के लिए" पहले जो बताया गया है, वह संयोजन: docker run -it --entrypoint cmd <image_name>काम करेगा।
बयाना कर्ट

2
@JuanHernandez, हाँ, आप छवि की पूरी सामग्री को डंप कर सकते हैं जैसा कि stackoverflow.com/a/42677219/320594 में दर्शाया गया है ।
जैम हैब्टलजेल

197

यहां स्वीकृत उत्तर समस्याग्रस्त है, क्योंकि इस बात की कोई गारंटी नहीं है कि एक छवि में किसी भी प्रकार का इंटरैक्टिव शेल होगा। उदाहरण के लिए, ड्रोन / ड्रोन की छवि में एक ही आदेश शामिल है /drone, और इसमें एक ENTRYPOINTअच्छी तरह से है, इसलिए यह विफल हो जाएगा:

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

और यह विफल हो जाएगा:

$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".

यह एक असामान्य विन्यास नहीं है; कई न्यूनतम छवियों में केवल द्विपदीय लक्ष्य सेवा का समर्थन करने के लिए आवश्यक हैं। सौभाग्य से, एक छवि फाइल सिस्टम की खोज के लिए तंत्र हैं जो छवि की सामग्री पर निर्भर नहीं करते हैं । सबसे आसान शायद docker exportकमांड है, जो एक टार आर्काइव के रूप में एक कंटेनर फाइल सिस्टम निर्यात करेगा । तो, एक कंटेनर शुरू करें (यह कोई फर्क नहीं पड़ता कि यह विफल होता है या नहीं):

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

फिर docker exportफाइल सिस्टम को निर्यात करने के लिए उपयोग करें tar:

$ docker export $(docker ps -lq) | tar tf -

docker ps -lq"मुझे सबसे हाल ही में डोकर कंटेनर की आईडी देना" वहाँ का मतलब है। आप इसे एक स्पष्ट कंटेनर नाम या आईडी से बदल सकते हैं।


5
यह उत्तर यह बताने के लिए सुपर उपयोगी है कि किसी निश्चित समय में कंटेनर के अंदर क्या हो सकता है
जोओ एंड्रेड

2
यह उत्तर अधिक सही है और मेरे लिए काम करता है, क्योंकि मैं विदेशी वास्तुकला के साथ छवि की सामग्री का पता लगाना चाहता हूं और मैं इसे सिर्फ "नहीं चला सकता"
व्लादिमीर पेरेवलोव

95

आपको केवल छवि सामग्री देखने के लिए एक कंटेनर शुरू नहीं करना चाहिए। उदाहरण के लिए, आप दुर्भावनापूर्ण सामग्री देखना चाहते हैं, न कि उसे चलाना। "रन" के बजाय "बनाएं" का उपयोग करें;

docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$

11
ऊपर दी गई 2 लाइन सिर्फ फाइल-सिस्टम कंटेंट को सूचीबद्ध करती है। यदि आप एक टार के रूप में सभी फ़ाइलों को प्राप्त करना चाहते हैं, तो आप इसे कुछ के साथ बदल सकते हैं docker export tmp_$$ > image-fs.tar
पीनो

विंडोज ओएस के लिए दूसरी पंक्ति क्या होगी? docker export tmp_$$ | tar tकाम नहीं करेगा।
अलेक्सई मारिनिचेंको

@Alexei Marinichenko tarआपके मशीन पर स्थापित नहीं हो सकता है। tar --helpइसे जाँचने का प्रयास करें ।
अब्दुर्रहमान I।

1
यह भी काम करता है अगर कंटेनर में कोई शेल नहीं है
पीटर डोटचेव

3
@AlexeiMarinichenko आप -oफ़ाइल को लिखने के लिए निर्दिष्ट करने के लिए पैरामीटर का उपयोग कर सकते हैं । जैसे docker export -o c:\temp\tmp_$$.tar tmp_$$
गिड्डीअपहॉर्सी

62
docker save nginx > nginx.tar
tar -xvf nginx.tar

निम्नलिखित फाइलें मौजूद हैं:

  • मैनिफ़ेस्ट.जॉन - फाइलसिस्टम लेयर्स और जसन फाइल का नाम बताता है जिसमें कंटेनर गुण हैं।
  • .json - कंटेनर गुण
  • - प्रत्येक "लेयरिड" डायरेक्टरी में उस लेयर से जुड़ी लेयर प्रॉपर्टी और फाइलसिस्टम का वर्णन करने वाली जसन फाइल होती है। डॉकर स्टोरेज छवियों को परतों के रूप में उपयोग करके स्टोरेज स्पेस को ऑप्टिमाइज़ करता है।

https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/

या

आप TUI के साथ अंतःक्रियात्मक रूप से छवि सामग्री देखने के लिए गोता का उपयोग कर सकते हैं

यहां छवि विवरण दर्ज करें

https://github.com/wagoodman/dive


5
यह मेरे लिए सबसे उपयोगी उत्तर की तरह लगता है, क्योंकि आपको फ़ाइलों को प्राप्त करने के लिए एक कंटेनर शुरू करने की आवश्यकता नहीं है।
एलेक थॉमस

1
पूरी तरह से @AlecThomas सहमत हैं - और इसे एक कदम आगे ले जाने के लिए, मुझे भी dockerक्या जरूरत है, जो कि अनिवार्य रूप से, एक अलग प्रकार की आर्काइव फ़ाइल है।
एड रैंडल

अच्छा जवाब, मैं भी टैग निर्दिष्ट करूंगा: docker save --output nginx.tar nginx:latestअन्यथा, डॉक्टर के अनुसार, इसमें "सभी मूल परतें, और सभी टैग + संस्करण" होंगे
Tarek

इसे अपवित्र किया जाना चाहिए क्योंकि यह आंतरिक का पता लगाने का एकमात्र तरीका है यदि आपके पास कोई यूनिक्स बर्तन नहीं है। इसके अलावा इस तरह एक कंटेनर के निर्माण की आवश्यकता नहीं है।
स्टैनिस्लाव जर्मन-इवतुशेंको

9

एक छवि आप को चलाने के लिए है की विस्तृत सामग्री को सूचीबद्ध करने के docker run --rm image/name ls -alRजहां --rmसाधन के रूप में जल्द ही बाहर निकलता है एक कंटेनर के रूप में के रूप में हटा दें।

यहां छवि विवरण दर्ज करें


11
मतलब यह है कि छवि है lsउपलब्ध है और मेंPATH
chaosaffe

6

प्रदर्शनकारी छवि !

  1. यह पता लगाने की क्या खोल के प्रकार में है bashया shया ...

    पहले छवि का निरीक्षण करें: docker inspect name-of-container-or-image

    entrypointया के लिए देखो cmdजौन वापसी में।

  2. फिर करो: docker run --rm -it --entrypoint=/bin/bash name-of-image

    एक बार अंदर करें: ls -lsaया कोई अन्य शेल कमांड जैसे:cd ..

    -itइंटरैक्टिव ... और tty के लिए खड़ा है। --rmनिकालें कंटेनर के लिए खड़ा है चलाने के बाद।


1
इस उत्तर के साथ समस्या यह है कि स्वीकृत उत्तर में चर्चा की गई है, इस बात की कोई गारंटी नहीं है कि आपकी छवि में कोई शेल है। या ls। या वास्तव में कोई भी सामान्य उपकरण।
लार्क्स

3

हम एक सरल एक की कोशिश कर सकते हैं:

docker image inspect image_id

यह डॉकर संस्करण में काम किया:

DockerVersion": "18.05.0-ce"

13
यह सामग्री नहीं दिखाता है ; यह केवल परतों आदि को दिखाता है, जो छवि के निर्माण में चला गया।
रोजर लिप्सकॉम्ब

0

विंडोज के लिए डॉकर ईई (हाइपर- V सर्वर 2016 पर 17.06.2-ee-6) C:\ProgramData\docker\windowsfilter\के साथ, मेजबान ओएस के पथ पर विंडोज कंटेनरों की सभी सामग्रियों की जांच की जा सकती है ।

कोई विशेष बढ़ते की जरूरत नहीं है।

docker ps -aआउटपुट से फ़ोल्डर आईडी उपसर्ग कंटेनर आईडी द्वारा पाया जा सकता है ।


-1

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

लंगर- cli छवि सामग्री myrepo / ऐप: नवीनतम फाइलें

https://anchore.com/opensource/

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