我根据说明here运行官方管理员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
下安装主机的根文件系统。是不是应该在那里访问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 watcherr。所以,我可能只是没有它。
答案 0 :(得分:0)
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
有关详细信息,请参阅these instructions。