2015-01-03 25 views
7

Tôi có ví dụ đơn giản từ hướng dẫn chính thức tại trang web docker.Làm thế nào để giết quá trình bên trong container? Docker top command

tôi chạy như sau:

sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done" 
a66asdasdhqie123... 

Sau đó, mất một đầu ra từ thùng chứa tạo:

sudo docker logs a66 
hello 
hello 
hello 
... 

Sau đó, tôi tra cứu các quá trình hoạt động của một container:

sudo docker top a66 
UID     PID     PPID    C     STIME    TTY     TIME    CMD 
root    25055    15152    0     20:07    ?     00:00:00   /bin/sh -c while true; do echo hello world; sleep 1; done 
root    25295    25055    0     20:10    ?     00:00:00   sleep 1 

Tiếp theo tôi cố gắng giết quá trình đầu tiên của vùng chứa:

sudo docker exec a66 kill -9 25055 

Tuy nhiên sau khi tôi làm cho nó không có gì thay đổi. Quy trình vẫn hoạt động và xuất "hello" mỗi giây. Tôi làm gì sai?

Trả lời

8

Khi tôi sinh sản tình hình của bạn Tôi thấy các PID khác nhau giữa docker top <container>docker exec -it <container> ps -aux. Khi bạn thực hiện docker exec lệnh được thực thi bên trong vùng chứa => nên sử dụng pid của vùng chứa. Nếu không, bạn có thể thực hiện việc giết mà không có docker trực tiếp từ máy chủ, trong trường hợp của bạn: sudo kill -9 25055.

+1

và thông thường bạn sẽ giết quá trình với 'docker kill ' tất nhiên. –

+0

Tại sao PIDS khác nhau giữa đầu và id trong các vùng chứa? Đó là lệnh 'top' cho thấy PIDS ở máy chủ? (Xin lỗi, không thể kiểm tra câu trả lời tôi đang sử dụng trên điện thoại di động) –

+1

có, 'docker top' hiển thị các PID của máy chủ, rõ ràng. –

1

việc kiểm tra này:

ps | grep -i a66 | tr -s ' '|cut -f2 -d' '| 
{ 
    while read line; 
    do kill -9 $line; 
    done 
} 

hiểu này bắt đầu từ lệnh thực hiện từ trái cho đến khi kết thúc mỗi ống (|) tùy chọn

đơn giản:

kill $(pidof a66) 
+0

Đây là gì? 'ps | grep -i a66' nó không hoạt động –

+0

trạng thái trả lại là gì? –

+0

Câu hỏi đặt ra là tại sao cách của tôi không hoạt động và không phải cách thực hiện nó theo cách khác. –

0

Hãy cho tôi một thời gian để tìm câu trả lời đúng, nhưng bạn sẽ phải quản lý quá trình này từ bên trong vùng chứa. Khi bạn chạy docker top a66 từ máy chủ, các PID là từ máy chủ lưu trữ của bạn, mặc dù đó không phải là hoàn toàn như vậy nếu sử dụng Cygwin. Bất kể, bạn sẽ cần phải bash hoặc những gì bạn có trở lại vào vùng chứa của mình và sử dụng các lệnh như ps auxkill trong khi trong vùng chứa để tìm và quản lý các PID khác nhau cho cùng một quy trình tại đó.

0

tôi đang tìm kiếm một cái gì đó như thế này, nhưng tôi không thể tìm thấy và sau đó tôi đã làm điều này:

[root @ máy tính xách tay ~] # Docker exec -nó tadeu_debian ps aux | grep ping | awk '{print $ 2}' | xargs -I {} docker exec -i tadeu_debian kill -9

Đó là hai "thực hiện" từ Docker e một xargs.

Vâng, tôi hy vọng điều này sẽ giúp ai đó!

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