在容器中运行的 Docker 进程也应该在主机上可见。
当我docker top
在其中一个容器上运行时,我可以看到应该在主机上运行的进程的 pid,但我找不到它正在运行的ps -ef
命令。它被隐藏了吗?我如何才能看到它列出的进程?
在 RHEL 系统上,我可以立即看到
我正在使用 Catalina 10.15.3
答案1
我完全是 Docker 新手,但 Bret Fisher 在 Udemy 上的 Docker 课程提到了 macOS 上的这个问题,并指出了解决方案贾斯汀·科马克。我其实不太了解 Justin 的解决方案的细节,但我设法实现了 OP 的要求:查看在主机上运行的 docker 容器内运行的进程,主机是 Docker 在 macOS 上使用的虚拟机。操作方法如下:
步骤 1)显示在特定容器中运行的进程,例如名为“数据库”的进程:
docker container top database
步骤 2)使用与 Justin Cormack 的 repo 相关的命令,在 Mac 上进入所有 Docker 容器正在运行的“虚拟机”:
docker run -it --rm --privileged --pid=host justincormack/nsenter1
结果:
注意更改后的提示。现在您已进入虚拟机。您可以进一步调查虚拟机,例如使用ls -la
步骤 3)使用普通top
命令(例如,虚拟机上docker container top
没有可用的命令)docker
结果:
请注意,除了 VM 上的其他进程之外,列表还显示 PID 为 3532 的进程,这是来自容器的 mysql 进程(参见步骤 1)。
4)退出进程类型ctrl+C
,退出虚拟机类型exit
现在您已回到真正的 macOS 上了。
希望这对其他像我一样的新手有帮助。:)