2016-12-01 23 views
5

Tôi có vùng chứa đế lót ly. Bên trong họ đã đưa ra một quy trình. Từ máy chủ lệnh top kết quả đầu ra pid của tất cả các quy trình được khởi chạy trong vùng chứa.docker tìm vùng chứa bằng pid của quá trình bên trong

Làm cách nào tôi có thể tìm thấy vùng chứa trong đó quá trình với PID này đang chạy?

Cảm ơn bạn.

Trả lời

8

Cảm ơn bạn @ Alex trong quá khứ và @Stanislav cho sự giúp đỡ. Nhưng tôi không nhận được câu trả lời đầy đủ cho tôi. Tôi kết hợp chúng lại.
Tóm lại, tôi đã tiếp theo.

Đầu tiên

pstree -sg <PID> 

nơi PID là PID của tiến trình từ lệnh top

Trong đầu ra Tôi nhận được cha mẹ PID cho quá trình cha mẹ systemd. PID này là PID của docker container.

Sau khi tôi thực hiện

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

nơi % PID% là PID phụ huynh này.

Kết quả là tôi có CONTAINER ID của docker.

Đó là những gì tôi muốn

+0

Bạn nên đánh dấu phần này là câu trả lời được chấp nhận =) – Cyclonecode

2

Tôi cho rằng bạn cần một cái gì đó như thế này:

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

Bạn có thể tìm thấy tất cả các bậc cha mẹ cho quá trình này:

pstree -sg <PID> 

chuỗi này sẽ chứa container

1

Bạn sẽ có thể để sử dụng exec đối với mỗi container đang chạy kiểm tra nếu pid tồn tại. Tất nhiên, cùng một quá trình id có thể tồn tại trong nhiều hơn một container. Đây là một bash script nhỏ mà tìm kiếm một tiến trình đang chạy dựa trên pid cung cấp trong mỗi container:

#!/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; 

Ví dụ:

./find-process.sh 1 
+0

vì vậy bạn luôn luôn 'docker exec' trong vùng chứa 7dd276808aec? Điều này có vẻ không có thật. – user2915097

+0

@ user2915097 - Rất tiếc lỗi của tôi tôi sẽ cập nhật. Tất nhiên bạn cần phải exec vào mỗi container đang chạy và kiểm tra xem thư mục '/ proc/' có tồn tại không. – Cyclonecode

Các vấn đề liên quan