2015-09-03 17 views
0

我在Docker容器中使用Linux服務器,我需要知道如何獲取應用程序,服務及其在容器內的狀態的詳細信息。我需要執行哪個命令才能獲取這些詳細信息。如何獲得碼頭集裝箱內的服務及其狀態?

例如:

容器包含tomcat服務器。我需要了解tomcat服務器的詳細信息及其狀態(服務是否在運行)。

我不知道是否有任何命令可用於獲取這些細節。

回答

0

命令

docker inspect

看起來像你想要的東西,檢查文檔

https://docs.docker.com/reference/commandline/inspect/

從容器內得到泊塢窗信息,請參閱

Docker, how to get container information from within the container?

+0

不,它不是我所需要的。它提供有關容器的詳細信息。我需要獲取有關服務和應用程序容器包含的詳細信息。 –

+0

如果你是'docker exec -it your_container bash'你的是在你的容器內,我猜你可以輸入所需的命令 – user2915097

1

您可以使用docker exec命令在容器內執行您需要的任何命令。

例如,列出在容器內的所有運行中的進程:

docker exec <my container> ps aux 

或顯示文件

docker exec <my container> cat /etc/resolv.conf 

這些命令將與在圖像中定義的用戶執行的內容。

docker exec -u root <my container> ls -l 

如果您需要運行多個命令,或使用容器中存在的環境變量,使用下面的技巧:你可以用-u選項來覆蓋它

docker exec <my container> sh -c 'echo ~; echo "PATH: $PATH"' 
+0

這是對的,但是'ps'不會被安裝在容器中。 –

0

嘗試docker top

docker top --help 

Usage: docker top [OPTIONS] CONTAINER [ps OPTIONS] 

Display the running processes of a container 

    --help=false  Print usage 

例如:

$ docker run -itd --name top-test debian 
abf71bd18ac8d93684be17326f7a3be2cbea9103eca75391201d8e7a1ecde6e6 
$ docker top top-test 
UID     PID     PPID    C     STIME    TTY     TIME    CMD 
root    1155    1001    0     09:50    pts/1    00:00:00   /bin/bash 

實例在PostgreSQL:

$ docker run -d --name pg postgres 
1798f94c8ce9fe279036ada6fed119f60b7c2363c5ab3a4752cd3a404e3ffd92 
$ docker top pg 
UID     PID     PPID    C     STIME    TTY     TIME    CMD 
999     3916    1001    0     13:23    ?     00:00:00   postgres 
999     3993    3916    0     13:23    ?     00:00:00   postgres: checkpointer process 
999     3994    3916    0     13:23    ?     00:00:00   postgres: writer process 
999     3995    3916    0     13:23    ?     00:00:00   postgres: wal writer process 
999     3996    3916    0     13:23    ?     00:00:00   postgres: autovacuum launcher process 
999     3997    3916    0     13:23    ?     00:00:00   postgres: stats collector process 

泊塢窗頂部實際上只是運行ps在幕後,所以我們可以把ARGS:

$ docker top pg -e -o pid,cmd 
PID     CMD 
3916    postgres 
3993    postgres: checkpointer process 
3994    postgres: writer process 
3995    postgres: wal writer process 
3996    postgres: autovacuum launcher process 
3997    postgres: stats collector process 

在一般情況下,你會發現只有一個單一的過程運行。歡迎來到集裝箱世界。

+0

我不想要流程細節,我需要服務細節。好吧,如果從你的角度來說,在我的容器中包含兩個以上的服務,例如Tomcat,MSSQL服務器等。我需要獲取所有服務的詳細信息,從結果中我怎麼能找到哪個進程是tomcat,哪個進程是MSSQL? –

+0

這只是ps的原始輸出。將輸出滾動到右側以查看命令名稱。我用postgres添加了一個更多上下文的例子。我真的不知道你的服務是什麼意思。如果有幫助,你也可以獲得進程「樹」。 –

+0

服務意味着在docker中運行的tomcat,mssql等。 –

0

列表中的所有容器:

docker stats $(docker ps|grep -v "NAMES"|awk '{ print $NF }'|tr "\n" " ") --no-stream

LIST容器內存使用超過99%:

docker stats $(docker ps|grep -v "NAMES"|awk '{ print $NF }'|tr "\n" " ") --no-stream | sort -k 8n | awk '(NR>1) && ($8 > 99) '