2

不管 docker/crio/containerd 启动容器,有没有办法了解 runc 容器是否作为特权容器运行?

docker inspect确实显示出特权,但我想在 runc 层找到答案。

4

1 回答 1

3

每个runc容器的状态和配置都可以从$ROOT_DIR/$CONTAINER_ID/state.json文件中获取,其中$ROOT_DIR是一组容器的根目录(通常由特定的更高级别的运行时管理,如 Docker)。例如,在我的机器上 Docker 使用 root dir /run/docker/runtime-runc/moby,因此,我可以找到runc一些容器的 -level 配置,如下所示:

# jq .config /run/docker/runtime-runc/moby/$CONTAINER_ID/state.json
{
  "no_pivot_root": false,
  "parent_death_signal": 0,
  "rootfs": "/var/lib/docker/overlay2/<CONTAINER_ID>/merged",
  "readonlyfs": false,
...
}

您可以很容易地发现该文件不包含privileged. 快速搜索runc源代码表明它没有特权容器的概念,即这是来自更高级别的抽象。反过来,这意味着没有简单runc的方法可以从级别确定容器是否作为特权容器启动。

但是,仍然可以说容器是否具有与在 Docker 级别通过参数授予的权限相同的权限:文件包含授予容器的功能列表;容器可用的设备节点列表;seccomp 模式等。从实际的角度来看,浪费时间检查所有这些设置是不明智的,因此最好只查看.--privilegedstate.jsondocker inspect

于 2020-05-29T01:03:24.657 回答