如何在docker容器中获取服务及其状态?

时间:2015-09-03 05:39:34

标签: docker

我在Linux服务器上安装了docker容器,我需要知道如何在容器中获取应用程序,服务及其状态的详细信息。我需要执行哪个命令来获取这些细节。

例如:

容器包含tomcat服务器。我需要获取tomcat服务器及其状态的详细信息(服务是否正在运行)。

我不知道是否有任何命令可以获取这些细节。

5 个答案:

答案 0 :(得分:2)

您可以使用docker exec命令执行容器内所需的任何命令。

例如,列出容器内的所有正在运行的进程:

docker exec <my container> ps aux

或显示文件内容

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

这些命令将使用图像中定义的用户执行。您可以使用-u选项覆盖它:

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

如果您需要运行多个命令,或使用容器中存在的环境变量,请使用以下技巧:

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

答案 1 :(得分:1)

列出所有容器:

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

内存使用量超过99%的LIST容器:

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

答案 2 :(得分:0)

命令

docker inspect

看起来像你想要的,查看文档

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

要从容器内获取泊坞窗信息,请参阅

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

答案 3 :(得分: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

Docker top实际上只是在幕后运行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

通常,您会发现只有一个进程正在运行。欢迎来到容器世界。

答案 4 :(得分:0)

我认为最简单的答案(由于OP似乎已经熟悉了应用程序,服务和状态的问题),是进入docker容器并在它们工作的上下文中运行这些熟悉的命令。

也就是说,如果您的容器名为app,请转到已安装docker的计算机上的文件夹并运行./launcher enter app

这会将您放入容器中,例如,您可以运行service apache2 status来查看容器上运行的Apache2的状态。