2016-12-01 10 views
5

मेरे पास डॉकर कंटेनर हैं। उनके अंदर एक प्रक्रिया शुरू की। मेजबान मशीन से कमांड top कंटेनरों के भीतर लॉन्च की गई सभी प्रक्रियाओं के आउटपुट पिड को कम करता है।डॉकर अंदरूनी प्रक्रिया के पिड द्वारा कंटेनर ढूंढें

मैं एक कंटेनर कैसे ढूंढ सकता हूं जिसमें इस पीआईडी ​​के साथ प्रक्रिया चल रही है?

धन्यवाद।

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}' | grep "%PID%" 

उत्तर

8

मदद के लिए @Alex अतीत और @Stanislav धन्यवाद यहां एक छोटा बैश स्क्रिप्ट है कि एक चल प्रत्येक कंटेनर में आपूर्ति पीआईडी ​​के आधार पर प्रक्रिया के लिए खोज है। लेकिन मुझे मेरे लिए पूर्ण जवाब नहीं मिला। मैंने उन्हें संयुक्त किया।
सारांश में मुझे अगला मिल गया है।

पहले

pstree -sg <PID> 

जहां पीआईडी ​​आदेश top

उत्पादन में मैं systemd माता पिता की प्रक्रिया के लिए माता-पिता पीआईडी ​​हो रही है से प्रक्रिया की पीआईडी ​​है। यह पीआईडी ​​डॉकर कंटेनर पीआईडी ​​है।

बाद मैं निष्पादित

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}' | grep "^%PID%" 

जहां % पीआईडी% इस माता पिता पीआईडी ​​है।

परिणामस्वरूप मेरे पास डॉकर कंटेनर आईडी है।

है यही कारण है कि मैं

+0

आपको इसे स्वीकृत उत्तर के रूप में चिह्नित करना चाहिए =) – Cyclonecode

2

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

#!/bin/bash 

for container in $(docker ps -q); do 
    status=`docker exec $container ls /proc/$1 2>/dev/null` 
    if [ ! -z "$status" ]; then 
    name=`docker ps --filter ID=$container --format "{{.Names}}"` 
    echo "PID: $1 found in $container ($name)" 
    break; 
    fi 
done; 

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

./find-process.sh 1 
1

आप इस प्रक्रिया के लिए सभी माता पिता पा सकते हैं::

pstree -sg <PID> 

यह श्रृंखला हो जाएगा कंटेनर

1

आप में सक्षम होना चाहिए शामिल

+0

ताकि आप हमेशा 'डोकर कंटेनर 7dd276808aec में exec' चाहते थे? यह फर्जी लग रहा है। – user2915097

+0

@ user2915097 - ओह, मेरे बुरे मैं अपडेट करूंगा। बेशक आपको हर चलने वाले कंटेनर में निष्पादित करने की आवश्यकता है और जांच करें कि '/ proc/ 'निर्देशिका मौजूद है या नहीं। – Cyclonecode

संबंधित मुद्दे