ubuntu的docker运行cAdvisor遇到“/var/lib/docker: read-only”报错

背景

今天在Ubuntu 运行docker-cAdvisor时候遇到问题

命令:

docker run --name=cadvisor --volume=/:/rootfs:ro \

--volume=/var/run:/var/run:ro \

--volume=/sys:/sys:ro \

--volume=/dev/disk/:/dev/disk:ro \

--publish=8080:8080 \

--detach=true \

--privileged \

--volume=/var/lib/docker/:/var/lib/docker:ro \

google/cadvisor

处罚报错,导致cadvisor容器启动失败。

docker: Error response from daemon: error while creating mount source path '/var/lib/docker': mkdir /var/lib/docker: read-only file system.

问题分析:

网上查找资料, 在github的issue上面,也有一个Ubuntu 18 的技术员遇到类似问题:Error running cadvisor docker package on Ubuntu 18.04.4 LTS

问题要从--volume=/var/lib/docker/:/var/lib/docker:ro这个参数说起,cadvisor 容器之所以要挂载操作系统的/var/lib/docker目录, 是因为很多系统(例如CentOS)安装docker, 就会使用/var/lib/docker这个目录作为“data-root”。cadvisor容器就是从/var/lib/docker文件夹中获取docker信息。

但是为什么CentOS可以, Ubuntu却不行呢?那是因为Ubuntu常用的dpk包安装的Docker并不是使用/var/lib/docker这个目录作为“data-root”的,所以就导致了问题。Ubuntu的Docker的“data-root”可以用下面命令查找:

docker info | grep "Docker Root Dir:"

结果是:

Docker Root Dir: /var/snap/docker/common/var-lib-docker


“Docker Root Dir”这个值,也可以在/etc/docker/daemon.json 中修改 “data-root”并重启docker实现。


故障处理:

修改一下命令, 用 docker info 的“Docker Root Dir” 代替 /var/lib/docker 即可:

DOCKER_ROOT_DIR=$( sudo docker info | grep "Docker Root Dir:" | sed 's/.*:\s*//' )

sudo  docker run  --name=cadvisor --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro  --volume=/sys:/sys:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --privileged --volume=${DOCKER_ROOT_DIR}:/var/lib/docker:ro google/cadvisor



参考:

Error running cadvisor docker package on Ubuntu 18.04.4 LTS

你可能感兴趣的:(ubuntu的docker运行cAdvisor遇到“/var/lib/docker: read-only”报错)