如何解决cadvisor错误`devicemapper文件系统统计不会被报告?

我正在运行官方的Docker镜像google/cadvisor:v0.24.1根据这里的说明(只用当前版本replace标签而不是latest版本):

 docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ google/cadvisor:v0.24.1 

看着容器里的日志,我看到这个:

 W0318 17:50:00.775708 1 fs.go:209] Could not get Docker devicemapper device: exit status 1 E0318 17:50:00.840177 1 factory.go:291] devicemapper filesystem stats will not be reported: stat /dev/mapper/dockervg-dockerlv_tmeta: no such file or directory 

docker命令将容器内的/rootfs下的主机的根文件系统挂载。 是不是考虑到那里的dm设备?

我没有发现任何设置,我可以改变指点顾问到真正的根源。

我必须将/ dev / mapper挂载到/ dev / mapper的容器中吗?


是的,我正在使用devicemapper:

 $ docker info -f '{{ .Driver }}' devicemapper 

只是在容器内部, /dev/mapper只有一个文件:

 $ docker exec cadvisor ls /dev/mapper -l total 0 crw------- 1 root root 10, 236 Mar 18 17:50 control 

主机的真正的/dev/mapper目录在/rootfs/dev/mapper的容器内是可访问的,但是cadvisor只是不使用它。


经过一些BMHATK查看源代码后,我认为这个用例只是不被支持者所支持,参见。 https://github.com/google/cadvisor/blob/master/utils/docker/docker.go#L64

 metadataDevice = fmt.Sprintf("/dev/mapper/%s_tmeta", poolName) 

所以它总是在/dev而不是/rootfs查找设备。 另外,由于过多的iops,下一个版本默认禁用thin_ls watcherr。 所以,我可能只是没有它而活着。

CentOS的说明包括docker run命令中需要的附加参数(特权和映射/ cgroup卷):

 docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ --privileged=true \ --volume=/cgroup:/cgroup:ro \ google/cadvisor:v0.24.1 

请参阅这些说明了解更多详情。