jan*_*-di 7 linux cgroups docker
由于 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::/
/ # cat /proc/1/cpuset
/
Run Code Online (Sandbox Code Playgroud)
题:
有什么办法可以从内部获取唯一的容器 ID?(不依赖容器主机名或必须使用 docker api 来获取 id)
Ric*_*rdH 12
该--cgroupns host
修复有效,但如果您不控制容器的创建,则该修复不可用。此外,此docker run
选项在 API 或 docker compose ( https://github.com/compose-spec/compose-spec/issues/148 ) 中不可用。
但是...好消息 - 容器 ID 仍然通过 /proc/self/mountinfo 公开:
\n678 655 254:1 /docker/containers/7a0144cee1256c539fab790199527b7051aff1b603ebcf7ed3fd436440ef3b3a/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/vda1 rw\n679 655 254:1 /docker/containers/7a0144cee1256c539fab790199527b7051aff1b603ebcf7ed3fd436440ef3b3a/hostname /etc/hostname rw,relatime - ext4 /dev/vda1 rw\n680 655 254:1 /docker/containers/7a0144cee1256c539fab790199527b7051aff1b603ebcf7ed3fd436440ef3b3a/hosts /etc/hosts rw,relatime - ext4 /dev/vda1 rw\n
Run Code Online (Sandbox Code Playgroud)\n这是一个将解析它的 Python 代码片段:\xef\xbb\xbf\xef\xbb\xbf\xef\xbb\xbf
\nwith open( \'/proc/self/mountinfo\' ) as file:\n line = file.readline().strip() \n while line:\n if \'/docker/containers/\' in line:\n containerID = line.split(\'/docker/containers/\')[-1] # Take only text to the right\n containerID = containerID.split(\'/\')[0] # Take only text to the left\n break\n line = file.readline().strip()\n
Run Code Online (Sandbox Code Playgroud)\n归功于richgriswold:https://community.toradex.com/t/python-nullresource-error-when-running-torizo ncore-builder-build/15240/4
\n