【发布时间】:2017-03-19 09:17:40
【问题描述】:
我正在按照here的说明运行官方的cadvisor Docker镜像google/cadvisor:v0.24.1(只用当前版本替换了标签而不是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 下。 cadvisor不应该访问那里的dm设备吗?
我发现没有设置可以将 cadvisor 更改为真正的 rootfs。
我是否必须将 /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 源代码之后,我认为 cadvisor 不支持这个用例,参见。 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 观察程序。所以,没有它我可能就活不下去了。
【问题讨论】:
-
你在使用 devicemapper 吗?包括
docker info -f '{{ .Driver }}'的输出 -
另外,您的 docker 主机使用什么。 Debian、Ubuntu、RHEL、CentOS、D4W、D4M 还是云提供商?
-
我使用的是 CentOS 7。
-
您是否还包括您使用的
docker run命令?谢谢。