由于 Docker 自引擎版本 20.10 起支持 cgroup v2,它将自动在启用了 cgroups v2 的发行版上使用它。从容器内获取唯一容器 ID 的已知解决方案不再有效。
/ # cat /proc/self/cgroup
0::/
/ # cat /proc/1/cpuset
/
Run Code Online (Sandbox Code Playgroud)
在 Debian 11 上使用 alpine:latest 尝试使用 docker v20.10.8。
cgroup v1 的工作解决方案: 如何从容器本身获取 Docker Linux 容器信息?
正如 docker 参考中所述,使用 cgroup v2,容器 id 在文件系统中的以下位置仍然可见,但无法从容器本身访问这些位置。
/sys/fs/cgroup/memory/docker/<longid>/ on cgroup v1, cgroupfs driver
/sys/fs/cgroup/memory/system.slice/docker-<longid>.scope/ on cgroup v1, systemd driver
/sys/fs/cgroup/docker/<longid/> on cgroup v2, cgroupfs driver
/sys/fs/cgroup/system.slice/docker-<longid>.scope/ on cgroup v2, systemd driver
Run Code Online (Sandbox Code Playgroud)
https://docs.docker.com/config/containers/runmetrics/#find-the-cgroup-for-a-given-container
编辑 1/2021-09-01:
一种解决方法是使用选项运行容器--cgroupns host。但这需要控制容器的创建。
/ # cat /proc/self/cgroup
0::/ …Run Code Online (Sandbox Code Playgroud)