容器里没有 ps
怎么办?
标签
开发/容器化
命令行/docker
运维/云原生/Docker
开发/容器化/Docker/Dockerfile
命令行/aws
基础设施/云服务商/亚马逊云/AWS
基础设施/应用容器/亚马逊云/AWS/ElaticContainerService/ECS
命令行/ps
操作系统/Debian
计算机/操作系统/Linux/内核/procfs
字数
461 字
阅读时间
3 分钟
今天去基于 node:20-slim
的容器里排查问题的时候发现容器里连 ps
都没有,想要观察当前运行的进程的时候会变的困难。
因为容器是部署在 AWS ECS 上的,没有办法像 Kubernetes 的 kubectl debug
那样可以简单轻松地复制出来一个共享的 sidecar 容器,所以我们只能硬着头皮解决一下这个问题了。
不过好在如果我们直接观察 Dockerfile
的话(如果需要看别的 Dockerfile 可以在 node - Official Image | Docker Hub 里点击其他的 Tag 然后 inspect),可以发现 node:20-slim
是基于 debian:bookworm-slim
构建的,这意味着我们起码能有 apt
可以用。
所以我们可以用 apt
安装 procps
补全 ps
缺失的问题:
shell
apt update && apt install procps
当然如果连 apt
都没有的话... 也许可以试试看 ps - Command to display only running processes in Linux - Unix & Linux Stack Exchange 介绍的:
shell
grep -w R /proc/[0-9]*/stat
或者参考一下 c - Programmatically read all the processes status from /proc - Stack Overflow
参考资料
延伸阅读
- node.js - What is the difference between node images for Docker and when to use which? - Stack Overflow
- 嗯嗯對,用 slim 或是 alpine 確實可以省下很多空間,但同時他們也少裝了很多東西,可能會導致一些問題 完整的 node image 是建立在 buildpack-deps:jessie 上,而 slim 版本是建立在 buildpack-deps:jessie-curl 上,後者比前者少裝了很多東西像是 g++、gcc、python 等等,這會導致 node:slim 沒辦法編譯… - Larry Lu - Medium
- Debug Scratch Docker Containers
- hightouchio/injecto: Debug
FROM scratch
containers by injecting contents of another image - Debugging “FROM scratch” on Kubernetes