首页 文章

如何修复cadvisor错误`devicemapper filesystem stats将不会被报告?

提问于
浏览
0

我正在运行官方管理员Docker镜像 google/cadvisor:v0.24.1 根据说明here(仅用当前版本替换标签而不是 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观察器 . 所以,我可能只是没有它 .

1 回答

  • 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 .

相关问题