如何找到Docker容器进程

如何找到Docker容器进程

简介

Docker是一个强大的工具,它允许开发者在容器内构建、运送和运行应用程序。容器是小型、独立的可执行包,包含了应用程序运行所需的所有组件–代码、库、依赖性和运行时间。Docker的关键功能之一是能够管理和监控容器内运行的进程。

在这篇文章中,我们将探讨如何找到Docker容器进程,以及如何使用不同的方法来查看和管理它们。

先决条件

你将需要在你的电脑上安装Docker,以便按照本指南进行操作。通过使用以下命令,你可以确定是否安装了Docker

$ docker --version

如果没有安装Docker,你可以按照你的操作系统的官方[ Docker安装指南](https://docs.docker.com/get-docker/)。

方法

有几种方法可以找到Docker容器的进程。我们将在这里讨论其中的一些方法–

  • Docker inspect命令

  • Docker top命令

  • Docker执行命令

让我们结合实例来详细讨论这些方法中的每一种。

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执行命令

用户可以通过使用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容器内运行的进程。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程