如何查找 Docker 容器进程?
介绍
Docker 是一种强大的工具,允许开发人员在容器内构建、交付和运行应用程序。容器是包含应用程序正常运行所需的所有组件(代码、库、依赖项和运行时)的小型独立可执行包。Docker 的关键功能之一是能够管理和监控容器内运行的进程。
在本文中,我们将探讨如何查找 Docker 容器进程以及如何使用不同的方法来查看和管理它们。
先决条件
您需要在您的计算机上安装 Docker 才能按照本指南进行操作。您可以使用以下命令确定 Docker 是否已安装:
$ docker --version
如果 Docker 未安装,您可以按照适用于您操作系统的官方 Docker 安装指南 进行操作。
方法
有几种方法可以查找 Docker 容器进程。我们将在本文中讨论其中的一些方法:
Docker inspect 命令
Docker top 命令
Docker exec 命令
让我们详细讨论每种方法以及示例。
Docker inspect 命令
我们可以使用 Docker inspect 命令获取有关特定容器的全面详细信息,包括其进程。这有助于进行故障排除或更深入地了解容器的运行方式。
语法
我们使用以下命令来使用 docker inspect:
$ docker inspect <container-name>
示例
步骤 1 - 在您的代码编辑器中导航到您的项目目录,该目录包含您需要查找容器进程的 Docker 容器。
要使用终端导航,请使用以下命令:
$ cd path-of-the-directory
步骤 2 - 在终端中,运行以下命令:
$ docker inspect docker-apps
这将打印有关容器“my-container”的全面详细信息,以及当前在其中运行的进程。
输出
[ { "Id": "sha256:eb6dda32a60d823a3816d88ed4b9d79c8fadca744d1ee1556231c00f8759f89e", "RepoTags": [ "docker-apps:latest" ], "RepoDigests": [], "Parent": "", "Comment": "buildkit.dockerfile.v0", "Created": "2023-01-08T05:13:17.063330293Z", "Container": "", "ContainerConfig": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": null, "Image": "", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "DockerVersion": "", "Author": "", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NODE_VERSION=19.4.0", "YARN_VERSION=1.22.19" ], "Cmd": [ "/bin/sh", "-c", "node app.js" ], "ArgsEscaped": true, "Image": "", "Volumes": null, "WorkingDir": "/app", "Entrypoint": [ "docker-entrypoint.sh" ], "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 176079128, "VirtualSize": 176079128, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/8p8o9wm9g6dwlhibzwd14zzsg/diff:/var/lib/docker/overlay2/9b834a59db8eb73cfea182889e02167519d51b77275278d12b0f0836ff9cb591/diff:/var/lib/docker/overlay2/9b546e9fd0a50f20bddd71bb4a8156e2fcbf1c52dc94d3c312c7c962320a10ad/diff:/var/lib/docker/overlay2/a76e906cbf39ed57b5b973cf95d43b379713ced3bf29de44a628894f3036e599/diff:/var/lib/docker/overlay2/e4c1f1bb76c66c5d1781a775c8a2ca9338065ea0b398aeaed4230a00a15d2952/diff", "MergedDir": "/var/lib/docker/overlay2/x8mn6648vzpbkai1h0fsqi7cz/merged", "UpperDir": "/var/lib/docker/overlay2/x8mn6648vzpbkai1h0fsqi7cz/diff", "WorkDir": "/var/lib/docker/overlay2/x8mn6648vzpbkai1h0fsqi7cz/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf", "sha256:9a6a030b65c4b6ac82eacf5ad6c84cbf66889e7f242b8eb4ff5645e58c24ab54", "sha256:72133ba0a087ab86a8688dec714d4641ed1b3d595d4293bf1009d4f6cde56ce3", "sha256:ed1deaa8b02f03679b53d4be39743add0c6315f88ae2586f90d54b3dcca9003d", "sha256:f8684c5845f4a6611e51ecdc18d83c50cd42dbf7dfbb119caf8909b326da183e", "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" ] }, "Metadata": { "LastTagTime": "2023-01-08T05:13:17.19313535Z" } } ]
Docker top 命令
用户可以使用 docker top 命令实时查看 Docker 容器中运行的进程。此命令有助于诊断和调试问题,以及快速确定哪些程序正在使用资源。
语法
以下命令将帮助您使用它:
$ docker top <container-name>
示例
步骤 1 - 在您的代码编辑器中导航到您的项目目录,该目录包含您需要查找容器进程的 Docker 容器。
步骤 2 - 在终端中,运行以下命令:
$ docker top my-docker
这将列出容器“my-container”中运行的所有进程。
输出
UID PID PPID C STIME TTY TIME CMD root 2534 2379 0 10:35 ? 00:00:00 /sbin/tini -- /usr/local/bin/jenkins.sh jenkins 2535 2534 0 10:35 ? 00:00:00 /bin/tini -- /usr/local/bin/jenkins.sh jenkins 2612 2535 0 10:35 ? 00:00:00 /usr/local/openjdk-8/bin/java -Djenkins.install.runSetupWizard=false -Djava.awt.headless=true -jar /usr/local/jenkins/jenkins.war --logfile=/var/jenkins_home/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080
在此示例中,Jenkins 运行的容器被给予了 docker top 命令,结果列出了这些进程的进程 ID 和名称。
Docker exec 命令
用户可以使用 docker exec 命令在活动的 Docker 容器内执行命令。此命令可用于与容器内的进程交互以及检查容器的状态。
语法
以下命令将帮助您使用它:
$ docker exec <container-name> <command>
示例
步骤 1 - 在您的代码编辑器中导航到您的项目目录,该目录包含您需要查找容器进程的 Docker 容器。
步骤 2 - 在终端中,运行以下命令:
$ docker exec my-container ps aux
容器“my-container”将执行“ps aux”命令,该命令将列出在其内部运行的每个进程。
输出
$ docker exec docker-apps ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 32784 4360 ? Ss 06:05 0:00 /bin/bash root 37 0.0 0.0 16780 3000 ? R+ 06:05 0:00 ps aux
此输出中显示了 ID 为 docker-apps 的容器内运行的进程。ps aux 命令显示了容器中当前活动的所有进程的列表,以及有关每个进程的用户、PID、CPU、RAM、虚拟内存、驻留集大小、终端、状态、启动时间和命令的信息。
结论
在本文中,我们探讨了如何查找 Docker 容器进程以及如何使用不同的方法来查看和管理它们。top 命令允许您查看容器内运行的进程,exec 命令允许您在运行的容器内运行命令,而 inspect 命令允许您查看有关容器的详细信息,包括其进程。通过使用这些方法,您可以有效地管理和监控 Docker 容器内运行的进程。