ps 命令在 docker 容器中不起作用

Posted

技术标签:

【中文标题】ps 命令在 docker 容器中不起作用【英文标题】:ps command doesn't work in docker container 【发布时间】:2015-01-14 22:20:05 【问题描述】:

我想在派生自 Debian 官方 Docker hub 存储库的 docker 容器中执行 ps 命令:

$ docker run -ti debian:wheezy /bin/bash
root@51afd6b09af8:/# ps
bash: ps: command not found

【问题讨论】:

【参考方案1】:

如果您无法安装 procps 包(没有适当的权限),您可以使用 /proc 目录。

前几个目录(以数字命名)是您的进程的 PID。在目录中,您可以找到有助于破译哪个进程连接到每个 PID 的附加信息。例如,您可以使用cat命令查看“cmdline”文件以检查哪个进程连接到PID。

$ ls /proc
1 10 11 ...

$ ls -1 /proc/22
attr
autogroup
auxv
cgroup
clear_refs
cmdline
...

$ cat /proc/22/cmdline 
/bin/sh

已编辑 - cmdline 中的空格丢失,因此我们可以将 cat 输出通过管道传递给 tr 命令,例如:

$ cat /proc/1/cmdline | tr '\0' ' '
/sbin/init splash

【讨论】:

虽然不太方便,但这似乎是更合适的答案。 要查看我必须运行的空格“cat /proc/22/cmdline | xargs -0”【参考方案2】:

如果您运行的是 CentOS 容器,则可以使用以下命令安装 ps:

yum install -y procps

在 Dockerfile 上运行此命令:

RUN yum install -y procps

【讨论】:

【参考方案3】:

ps 未安装在基础wheezy 映像中。在容器中试试这个:

RUN apt-get update && apt-get install -y procps

【讨论】:

如果您收到此错误“命令 '/bin/sh -c apt-get install procps' 返回非零代码:1”,请改用 apt-get install -y procps 这是 2014 年讨论的不包括 ps 的 URL:https://github.com/moby/moby/issues/447#issuecomment-36647268 运行 apt-get update && apt-get install -y procps && rm -rf /var/lib/apt/lists/* 从你的命令中删除 RUN,我认为这是一个错字。 我的编辑显然被拒绝了。我不知道为什么,但是在一个正在运行的容器中运行RUN apt-get update && apt-get install -y procps 只会导致错误。原来的帖子,也是被接受的答案,很好。【参考方案4】:

首先,运行以下命令:

apt-get update && apt-get install procps

然后运行:

ps -ef

【讨论】:

为我工作得很好。谢谢@harun【参考方案5】:

使用 docker 顶部

docker top <container ID>

【讨论】:

以上是关于ps 命令在 docker 容器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

gradle 连续构建技巧在 docker 容器中不起作用

子进程在 docker 容器中不起作用

HTTPS 在带有 Docker 容器的 Service Fabric 中不起作用

Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用

Grails 监视文件在 Vagrant 虚拟机中运行的 Docker 容器中不起作用

Eureka 客户端的“prefer-ip-address”在 docker 容器中不起作用