使用cAdvisor监控rootless模式Docker无法连接守护进程问题咨询
Rootless模式下cAdvisor对接Docker的配置调整说明
是的,Docker运行在rootless模式下必须调整cAdvisor的卷挂载配置,你当前遇到的连接报错本质是默认启动命令里的挂载路径全部对应root模式下Docker的系统级路径,和rootless模式的实际文件路径不匹配。
报错核心原因
rootless模式的Docker daemon运行在普通用户权限下,不会占用系统级的资源路径,和你当前配置的差异主要有两点:
- Docker监听的Unix Socket默认不在
/var/run/docker.sock位置,而是存放在当前用户的运行时目录下,默认路径为/run/user/<当前运行Docker的用户UID>/docker.sock - Docker的数据存储目录默认不在系统级
/var/lib/docker位置,而是存放在当前用户目录下,默认路径为~/.local/share/docker
你原命令挂载的系统级路径下根本不存在rootless Docker的socket文件和数据目录,自然无法连接到daemon获取容器信息。
调整后的正确启动命令
先确认你运行rootless Docker的用户UID(执行id -u即可查看,普通用户默认一般是1000),替换命令里的占位参数即可:
docker run -d -p 8080:8080 \ -v /:/rootfs:ro \ -v /run/user/你的用户UID/docker.sock:/var/run/docker.sock:ro \ -v /sys:/sys:ro \ -v /home/你的用户名/.local/share/docker/:/var/lib/docker:ro \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --name=cadvisor google/cadvisor:latest
注意事项
- 不需要挂载整个
/var/run目录,仅需精准挂载docker.sock文件即可,且socket权限设置为只读ro就满足cAdvisor的采集需求,不需要配置读写权限,降低安全风险 - 如果你自定义过rootless Docker的socket路径或数据存储路径,可以通过
docker context inspect命令查看当前使用的rootless上下文对应的实际路径,替换命令中对应的挂载源即可 - 若启动后出现cgroup资源指标采集异常,可以执行
mount | grep cgroup确认当前环境的cgroup实际挂载位置,对应调整cgroup相关的挂载参数
内容的提问来源于stack exchange,提问作者mreiterer
相关产品推荐
相关产品推荐

