如何盘点容器内的业务资产

906 阅读1分钟

在端侧,经常需要将一个容器的安装了哪些系统包(如deb、rpm)准确识别出来。

方法1:使用类似 docker exec CONTAINER_ID CMD 的方式

这种方式能达到目的,但有如下缺点:

  • 依赖docker命令可用。一些情况下可能不成立(对程序有较高的兼容适配成本):
    • 没装docker这个工具或者改名了
    • sock文件文件路径不是默认的
    • 需要tls认证
    • 如果需要适配containerd, 代码也要适配一套, 并同样面临上述问题

方法2:使用chroot

具体步骤如下:

  • 找到容器的根进程
  • chroot /proc/PID/root '/bin/bash'
  • 执行对应的 apt 或者yum命令,示例如下

image.png

image.png

结论

方法2是一种通用的方案, 对外部依赖少, 同时不关心运行时的差异, 不存在兼容适配问题, 整体代码都比较好维护, 常用于: 容器内业务资产的盘点

另外如果需要做更加细粒度的资产盘点,那么可能还要配合 namespace 使用。