0

我正在google/cadvisor:v0.24.1按照此处的说明运行官方 cadvisor Docker 映像(仅将标记替换为当前版本而不是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 的容器中吗?


是的,我正在使用设备映射器:

$ 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 观察程序。所以,我可能只是没有它。

4

1 回答 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

有关更多详细信息,请参阅这些说明

于 2017-03-19T21:29:27.767 回答