डॉकर में कंटेनर को चलाने / रोकने की पूरी कमान देखें


263

मैं डॉकर में चल रहे कंटेनर / प्रक्रिया की पूरी कमान कैसे देख सकता हूं?

$ docker ps --all
CONTAINER ID    IMAGE          COMMAND                 CREATED          STATUS                     PORTS    NAMES
5b6291859b61    nginx:1.7.8    "nginx -g 'daemon of    4 minutes ago    Exited (0) 4 minutes ago            thirsty_brattain

मैं केवल "नग्नेक्स-जी 'डेमॉन ऑफ़" देख सकता हूँ .. यहाँ, पूरी कमांड नहीं।


2
यहाँ भी देखें: stackoverflow.com/q/32758793/1747983
तिलो

जवाबों:


544

docker ps --no-trunc चल रहे कंटेनरों के अन्य विवरण के साथ पूर्ण कमांड प्रदर्शित करेगा।


13
धन्यवाद इससे बहुत मदद मिली। बस एक नोट: '-notrunc' को हटा दिया गया है, इसके द्वारा प्रतिस्थापित किया गया है --no-trunc
प्रोमेथियस

2
यह मेरे लिए काम नहीं किया। इसने मुझे आज्ञा दी लेकिन सभी स्विच नहीं (जो कि "पूर्ण कमांड" का उपयोग करते समय मुझे लगता है)। रनअइंट कमांड ने ऊपर दिए गए अन्य लिंक का उल्लेख किया है जो मेरे लिए बेहतर काम करते हैं।
डायलन स्मिथ

1
केवल चलने वाले कंटेनरों की पूरी कमान के लिए बस सभी कमांड हटा दें। docker ps --no-trunc
जैकब मॉरिस

साभार - सही मेरा पिछला आदेश सभी कंटेनरों के लिए था न कि केवल उन कंटेनरों को चलाने का जो मूल प्रश्न था।
स्कॉट एस।

असंबद्ध आदेश बहुत लंबा हो सकता है, केवल पहले 400 वर्णों के साथ प्रत्येक पंक्ति देखेंdocker ps --all --no-trunc|cut -c-400
rubo77

183

उपयोग:

docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)

... यह सभी कंटेनरों के लिए एक "docker निरीक्षण" करता है।


8
यह docker ps कमांड प्रदर्शित नहीं करता है। Docker ps कमांड पथ और आर्ग्स का निरीक्षण करने के लिए संगत है।
JDiMatteo 22

3
जनवरी 2018 के अनुसार कोई बीनो नहीं है
sg

4
यानीdocker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $(docker ps -a -q)
पॉल

2
यदि आप केवल sudoकमांड के सामने फेंक रहे हैं , तो आपको "docker inspect" requires at least 1 argument(s).कंटेनर के सभी नामों को प्राप्त करने के लिए दूसरे कॉल के कारण मिलेगा, आप संभवतः अंदर एक सूडो जोड़ना चाहेंगे $(
रैंडमइन्सानो

और जो लोग बेहतर -f क्वेरी के समझने के लिए करना चाहते हैं, मैं एक अच्छा विवरण यहाँ पाया है container-solutions.com/docker-inspect-template-magic
intijk

16

उपयोग:

docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q)

इसी के समान कमांड पथ और तर्क प्रदर्शित करेंगे docker ps


आप एक विशिष्ट कमांड जैसे कि खोज करने के लिए इसे कैसे संशोधित करेंगे kube-apiserver?
जोनाथन

@ docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q) | grep kube-apiserver
जोनाथन

8

Git रिपॉजिटरी https://github.com/lavie/runlike से runlike का उपयोग करें

भागदौड़ को स्थापित करने के लिए

pip install runlike

चूंकि यह कंटेनर आईडी को एक कमांड के रूप में स्वीकार करता है, ताकि कंटेनर आईडी का उपयोग कमांड के बाद किया जा सके

docker ps -a -q

आप निम्नलिखित कमांड के साथ पूर्ण डॉक रन कमांड निकालने के लिए रनटाइम का उपयोग करने के लिए अच्छे हैं

runlike <docker container ID>

काम नहीं करता है। शो "कमांड" ['डॉकटर', 'इंस्पेक्ट', u'06e6a369f909 ']' नॉन-जीरो एग्जिट स्टेटस 1 'लौटा
fstang

जैसा कि मैंने उल्लेख किया है कि क्या आपने रन-वे स्थापित किए हैं
अभिषेक जैन

5
इससे भी बेहतर है कि आप एक डॉकटर कंटेनर के भीतर रनवे को चला सकते हैं और इसे स्थापित करने से बच सकते हैं:docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER
डायलन स्मिथ

3

टी एल-DR

docker ps --no-truncऔर docker inspect CONTAINERकंटेनर को शुरू करने के लिए निष्पादित एंट्रीपॉइंट प्रदान करें, जिसके साथ कमांड को पारित किया गया है, लेकिन यह कुछ हिस्सों को याद कर सकता है जैसे ${ANY_VAR}कि कंटेनर पर्यावरण चर को हल नहीं किया गया है।

उस पर काबू पाने के लिए, docker inspect CONTAINERएक फायदा है क्योंकि यह Config.Envसंपत्ति से कंटेनर में परिभाषित अलग-अलग एनवी चर और उनके मूल्यों को पुनः प्राप्त करने की अनुमति देता है ।

docker psऔर docker inspectनिष्पादित प्रविष्टि और उसके आदेश के बारे में जानकारी प्रदान करें। अक्सर, यह एक आवरण प्रविष्टि स्क्रिप्ट ( .sh) और कंटेनर द्वारा शुरू किए गए "वास्तविक" कार्यक्रम नहीं है। उस पर जानकारी प्राप्त करने के लिए, प्रक्रिया की जानकारी के साथ psया /proc/1/cmdlineमदद का अनुरोध करें ।


1) docker ps --no-trunc

यह एंट्रीपॉइंट और सभी रनिंग कंटेनरों के लिए निष्पादित कमांड को प्रिंट करता है। हालांकि यह एंट्रीपॉइंट को पारित कमांड को प्रिंट करता है (यदि हम इसे पास करते हैं), तो यह docker env वेरिएबल्स (जैसे $FOOया ${FOO}) का मान नहीं दिखाता है ।
यदि हमारे कंटेनर एनवी चर का उपयोग करते हैं, तो यह पर्याप्त नहीं हो सकता है।

उदाहरण के लिए, अल्पाइन कंटेनर चलाएँ:

docker run --name alpine-example -e MY_VAR=/var alpine:latest sh -c 'ls $MY_VAR'

जब docker -ps का उपयोग करें जैसे:

docker ps -a --filter नाम = अल्पाइन-उदाहरण --no-trunc

यह प्रिंट करता है:

कंटेनर आईडी इमेजेज बनाई गई स्टेटस पोर्टल नाम
5b064a6de6d8417 ... अल्पाइन: नवीनतम "sh -c 'ls $ MY_VAR'" 2 मिनट पहले बाहर निकलें (0) 2 मिनट पहले अल्पाइन-उदाहरण

हम एंट्रीपॉइंट को पास की गई कमांड देखते हैं: sh -c 'ls $MY_VAR'लेकिन $MY_VAR वास्तव में हल नहीं हुई है।

2) docker inspect CONTAINER

जब हम अल्पाइन-उदाहरण कंटेनर का निरीक्षण करते हैं:

docker inspect alpine-example | grep -4 Cmd

कमांड भी है, लेकिन हम अभी भी एनवी चर मूल्य नहीं देखते हैं:

        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ],

वास्तव में, हम इन डॉकटर कमांड के साथ प्रक्षेपित चर नहीं देख सकते थे।
ट्रेड-ऑफ के रूप में, हम डॉकटर निरीक्षण के साथ कंटेनर के लिए अलग से कमांड और एनवी चर दोनों को प्रदर्शित कर सकते हैं:

docker inspect  alpine-example  | grep -4 -E "Cmd|Env"

वह प्रिंट:

        "Env": [
            "MY_VAR=/var",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ]

एक और अधिक डॉक करने का तरीका यह होगा कि रेंडर करने के लिए JSON विशेषताओं को निर्दिष्ट करने के लिए --formatध्वज का उपयोग किया जाए docker inspect:

docker inspect --format '{{.Name}} {{.Config.Cmd}}  {{ (.Config.Env) }}'  alpine-example

यह आउटपुट:

/ अल्पाइन-उदाहरण [sh -c ls $ MY_VAR] [MY_VAR = / var PATH = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / बिन: / sbin: / bin]

3) चल रहे कंटेनरों के लिए कंटेनर से ही शुरू की गई प्रक्रिया को पुनः प्राप्त करें

Docker द्वारा निष्पादित एंट्रीपॉइंट और कमांड मददगार हो सकती है लेकिन कुछ मामलों में, यह पर्याप्त नहीं है क्योंकि यह केवल एक रैपर एंट्रीपॉइंट स्क्रिप्ट ( .sh) है जो वास्तविक / कोर प्रक्रिया शुरू करने के लिए जिम्मेदार है।
उदाहरण के लिए जब मैं नेक्सस कंटेनर चलाता हूं, तो कमांड को निष्पादित किया जाता है और कंटेनर को चलाने के लिए दिखाया जाता है "sh -c ${SONATYPE_DIR}/start-nexus-repository-manager.sh"
PostgreSQL के लिए है "docker-entrypoint.sh postgres"

अधिक जानकारी प्राप्त करने के लिए, हम एक रनिंग कंटेनर पर निष्पादित कर सकते हैं docker exec CONTAINER ps aux
यह अन्य प्रक्रियाओं को मुद्रित कर सकता है जो हमें रुचि नहीं दे सकते हैं।
एंट्रीपॉइंट द्वारा शुरू की गई प्रारंभिक प्रक्रिया को संकीर्ण करने के लिए, हम कर सकते हैं:

docker exec CONTAINER ps -1

मैं निर्दिष्ट करता हूं 1क्योंकि प्रविष्टि बिंदु द्वारा निष्पादित प्रक्रिया आम तौर पर 1आईडी के साथ एक है ।

बिना ps, हम अभी भी /proc/1/cmdline(अधिकांश लिनक्स डिस्ट्रोस में लेकिन सभी नहीं) में जानकारी पा सकते हैं । उदाहरण के लिए :

docker exec CONTAINER cat /proc/1/cmdline | sed -e "s/\x00/ /g"; echo    

अगर हमारे पास कंटेनर शुरू करने वाले डॉकटर होस्ट तक पहुंच है, तो एंट्रीपॉइंट द्वारा निष्पादित प्रक्रिया की पूरी कमान प्राप्त करने के लिए एक और विकल्प है:: निष्पादित करें ps -PIDजहां कंटेनर चलाने के लिए डॉक डेमॉन द्वारा बनाई गई पीआईडी ​​स्थानीय प्रक्रिया है जैसे:

ps -$(docker container inspect --format '{{.State.Pid}}'  CONTAINER)

Docker ps के साथ उपयोगकर्ता के अनुकूल स्वरूपण

docker ps --no-truncहमेशा पढ़ना आसान नहीं होता है।
स्तंभों को मुद्रित करने और एक सारणीबद्ध प्रारूप में निर्दिष्ट करने से यह बेहतर हो सकता है:

docker ps   --no-trunc  --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"

एक उपनाम बनाने में मदद मिल सकती है:

alias dps='docker ps   --no-trunc  --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"'

2

एक पूर्ण जवाब में डायलन की टिप्पणी को आगे बढ़ाना क्योंकि TOO USEFUL:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER

यह क्या करता है? एक कंटेनर के अंदर https://github.com/lavie/runlike चलाता है , आपको पूरा डॉक रन कमांड मिलता है, फिर आपके लिए कंटेनर निकालता है।

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