Docker
एक कंटेनर डिबगिंग
खोज…
वाक्य - विन्यास
- डॉकटर आँकड़े [विकल्प] [कंटेनर ...]
- डॉकटर लॉग्स [विकल्प] कंटेनर
- डॉकटर शीर्ष [विकल्प] कंटेनर [पीएस विकल्प]
एक चल रहे कंटेनर में प्रवेश करना
एक कंटेनर में संचालन को निष्पादित करने के लिए, docker exec
कमांड का उपयोग करें। कभी-कभी इसे "कंटेनर में प्रवेश" कहा जाता है क्योंकि सभी कमांड कंटेनर के अंदर निष्पादित होते हैं।
docker exec -it container_id bash
या
docker exec -it container_id /bin/sh
और अब आपके पास आपके चलने वाले कंटेनर में एक शेल है। उदाहरण के लिए, निर्देशिका में फ़ाइलों को सूचीबद्ध करें और फिर कंटेनर छोड़ दें:
docker exec container_id ls -la
आप एक विशिष्ट उपयोगकर्ता के साथ कंटेनर में प्रवेश करने के लिए -u flag
का उपयोग कर सकते हैं, जैसे uid=1013
, gid=1023
।
docker exec -it -u 1013:1023 container_id ls -la
यूआईडी और जीआईडी कंटेनर में मौजूद नहीं है, लेकिन कमांड में त्रुटियां हो सकती हैं। यदि आप एक कंटेनर लॉन्च करना चाहते हैं और तुरंत कुछ जांचने के लिए अंदर प्रवेश करते हैं, तो आप कर सकते हैं
docker run...; docker exec -it $(docker ps -lq) bash
कमांड docker ps -lq
केवल आखिरी (एल-इन- -lq
) कंटेनर की आईडी को आउटपुट करता है। (यह आप अपने कंटेनर में उपलब्ध दुभाषिया के रूप में बैश है, आप श या zsh या किसी अन्य हो सकता है)
संसाधन उपयोग की निगरानी करना
दुर्व्यवहार अनुप्रयोगों को खोजने के लिए सिस्टम संसाधन उपयोग का निरीक्षण एक कुशल तरीका है। यह उदाहरण कंटेनरों के लिए पारंपरिक top
कमांड के बराबर है:
docker stats
विशिष्ट कंटेनरों के आंकड़ों का पालन करने के लिए, उन्हें कमांड लाइन पर सूचीबद्ध करें:
docker stats 7786807d8084 7786807d8085
Docker आँकड़े निम्नलिखित जानकारी प्रदर्शित करता है:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
7786807d8084 0.65% 1.33 GB / 3.95 GB 33.67% 142.2 MB / 57.79 MB 46.32 MB / 0 B
डिफ़ॉल्ट रूप से docker stats
कंटेनरों की आईडी प्रदर्शित करते हैं, और यह बहुत उपयोगी नहीं है, यदि आपका कंटेनर के नाम को प्रदर्शित करना पसंद करता है, तो बस करें
docker stats $(docker ps --format '{{.Names}}')
एक कंटेनर में निगरानी की प्रक्रिया
लाइव रनिंग एप्लिकेशन पर किसी समस्या को कम करने के लिए सिस्टम संसाधन उपयोग का निरीक्षण एक कुशल तरीका है। यह उदाहरण कंटेनरों के लिए पारंपरिक ps
कमांड के बराबर है।
docker top 7786807d8084
आउटपुट स्वरूप को फ़िल्टर करने के लिए, कमांड लाइन पर ps
विकल्प जोड़ें:
docker top 7786807d8084 faux
या, रूट के रूप में चलने वाली प्रक्रियाओं की सूची प्राप्त करने के लिए, जो एक संभावित हानिकारक अभ्यास है:
docker top 7786807d8084 -u root
docker top
कमांड विशेष रूप से उपयोगी साबित होती है जब शेल या ps
कमांड के बिना न्यूनतर कंटेनरों का निवारण किया जाता है।
एक चल रहे कंटेनर में संलग्न करें
'कंटेनर में संलग्न करना' इस संदर्भ में एक टर्मिनल सत्र शुरू करने का कार्य है कि कंटेनर (और उसमें कोई भी कार्यक्रम) चल रहा है। यह मुख्य रूप से डिबगिंग उद्देश्यों के लिए उपयोग किया जाता है, लेकिन कंटेनर के भीतर चलने वाले कार्यक्रमों के लिए विशिष्ट डेटा को पारित करने की आवश्यकता होने पर भी इसकी आवश्यकता हो सकती है।
इसे करने के लिए attach
कमांड का उपयोग किया जाता है। इसका यह सिंटैक्स है:
docker attach <container>
<container>
कंटेनर आईडी या कंटेनर का नाम हो सकता है। उदाहरण के लिए:
docker attach c8a9cf1a1fa8
या:
docker attach graceful_hopper
आपको अपने उपयोगकर्ता के आधार पर और ऊपर दिए गए आदेशों के आधार पर उपरोक्त आदेशों को sudo
करने की आवश्यकता हो सकती है।
नोट: अटैच केवल एक बार में एक सिंगल सेशन को कंटेनर में संलग्न करने की अनुमति देता है।
चेतावनी: सभी कीबोर्ड इनपुट कंटेनर में भेजे जाएंगे। Ctrl-c मारना आपके कंटेनर को मार देगा।
एक संलग्न कंटेनर से अलग करने के लिए, क्रमिक रूप से Ctrl-p तब Ctrl-q मारा
एक कंटेनर में कई शेल सत्रों को संलग्न करने के लिए, या बस एक विकल्प के रूप में, आप exec
उपयोग कर सकते हैं। कंटेनर आईडी का उपयोग करना:
docker exec -i -t c8a9cf1a1fa8 /bin/bash
कंटेनर के नाम का उपयोग करना:
docker exec -i -t graceful_hopper /bin/bash
exec
एक कंटेनर के भीतर एक कार्यक्रम चलाएगा, इस मामले में /bin/bash
(एक शेल, संभवतः एक कंटेनर है)। -i
एक इंटरैक्टिव सत्र जबकि इंगित करता है, -t
आबंटित करता है एक छद्म TTY।
नोट: अटैचमेंट के विपरीत, Ctrl-c मारना केवल निष्पादन की कमांड को अंतःक्रियात्मक रूप से चलाने पर समाप्त होगा।
लॉग मुद्रण
लॉग के बाद लाइव चल रहे एप्लिकेशन को डीबग करने का कम घुसपैठ वाला तरीका है। यह उदाहरण कंटेनर 7786807d8084
पर पारंपरिक tail -f some-application.log
के व्यवहार को पुन: 7786807d8084
।
docker logs --follow --tail 10 7786807d8084
यह कमांड मूल रूप से कंटेनर प्रक्रिया के मानक आउटपुट (पीआईडी 1 के साथ प्रक्रिया) को दर्शाता है।
यदि आपके लॉग में मूल रूप से टाइमस्टैम्पिंग शामिल नहीं है, तो आप --timestamps
ध्वज जोड़ सकते हैं।
एक बंद कंटेनर के लॉग को देखना संभव है, या तो
docker run ... ; docker logs $(docker ps -lq)
साथ असफल कंटेनर शुरू करेंdocker run ... ; docker logs $(docker ps -lq)
कंटेनर आईडी या नाम के साथ खोजें
docker ps -a
और फिर
docker logs container-id
या
docker logs containername
के रूप में यह एक बंद कंटेनर के लॉग को देखने के लिए संभव है
डॉकर कंटेनर प्रक्रिया डिबगिंग
डॉकर एक प्रक्रिया को चलाने के लिए सिर्फ एक फैंसी तरीका है, वर्चुअल मशीन नहीं। इसलिए, "कंटेनर में" एक प्रक्रिया को डिबग करना भी "होस्ट पर" संभव है, केवल एक अनुमति के रूप में चल रहे कंटेनर प्रक्रिया की जांच करके उपयोगकर्ता उन होस्ट (जैसे रूट) पर उन प्रक्रियाओं का निरीक्षण करने के लिए उपयुक्त अनुमति देता है। उदाहरण के लिए, साधारण ps
को रूट के रूप में चलाकर मेजबान पर हर "कंटेनर प्रक्रिया" को सूचीबद्ध करना संभव है:
sudo ps aux
वर्तमान में चलने वाले डॉकटर कंटेनरों को आउटपुट में सूचीबद्ध किया जाएगा।
एक कंटेनर में चल रही प्रक्रिया को डीबग करने के लिए अनुप्रयोग विकास के दौरान यह उपयोगी हो सकता है। उपयुक्त अनुमति वाले उपयोगकर्ता के रूप में, विशिष्ट डिबगिंग उपयोगिताओं का उपयोग कंटेनर प्रक्रिया पर किया जा सकता है, जैसे स्ट्रेस, लेट्रेस, जीएसबीबी, आदि।