如何记录Docker容器内所有运行的进程?

33

使用命令登录容器后 -

docker exec -it <container_name>

如何检查容器内运行的所有进程? "ps aux" 是正确的方法吗?有更好的替代方法/方法吗?


1
在您的命令行末尾输入以下内容:bash,然后进入后,输入yes ps即可运行。另外,尝试使用ps eafww以查看宽输出。 - Scott Stensland
3个回答

51
您可以使用专用命令top列出Docker容器中的进程,无论容器中运行的操作系统是什么。
docker top <container>

3
这应该是被接受的答案。我发现在发现https://hub.docker.com/_/debian精简容器不包含命令pstop之后找到了这个答案。 - DrZaphod

24

可以使用以下命令在不登录终端的情况下显示容器内运行的所有进程。当然,这就像使用ps -eaf一样简单,只需将其添加到docker exec即可。

bash $ sudo docker exec -it test1 ps -eaf
PID   USER     TIME   COMMAND
    1 root       0:00 sh
    7 root       0:00 sh
   60 root       0:00 /bin/sh
   67 root       0:00 /bin/sh
   84 root       0:00 ps -eaf

正如之前提到的,如果您已经在容器内部,则只需使用ps -eaf命令查看正在运行的进程。

顺便提一下,建议每个容器只有一个用户应用程序/进程。


谢谢。关于每个容器只有一个应用程序进程的问题。我有一个Python应用程序,它只是调用一个Java jar文件,因此有一个Python进程和一个Java进程在短时间内执行。我应该在不同的容器中运行它们,还是在同一个容器中运行会过度? - Always_Beginner
我所提到的是推荐的方式。容器会在指定的进程结束后自动停止。用户只需要为长时间运行的进程/容器显式地停止容器。因此,这不是过度杀伤力。如果可能的话,您可以选择在两个容器中运行您的进程。顺便说一句,如果这个答案对您有帮助,请考虑接受它。 - Rao

13

延续 @Slawomir 的回答

使用 ps 选项,docker top [--help] CONTAINER [ps OPTIONS]

docker top <container_id> -eo pid,cmd


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接