如何获得docker集装箱内的服务和状态?

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

例如:

一个容器包含tomcat服务器。 我需要了解tomcat服务器的详细信息及其状态(服务是否在运行)。

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

你可以使用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 

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

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

命令

docker inspect

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

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

从容器中获取docker信息,请参阅

Docker,如何从容器中获取容器信息?

尝试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顶端其实就是在后台运行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 

一般来说,你会发现只有一个进程正在运行。 欢迎来到集装箱的世界。

列出所有容器:

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 ) '