当linux安装好docker-ce后应该及时考虑容器挂载目录的问题,避免后续出现磁盘不足问题导致异常
情况一:刚安装docker
修改容器配置文件,增加参数,默认路径为 /var/lib/docker/
1 2 3 4
| [root@ceshi-128 ~]# vi /etc/docker/daemon.json { "data-root":"/data/docker" #根据自己所选的路径修改即可 }
|
重启服务
1
| [root@ceshi-128 ~]# systemctl restart docker
|
- 如果增加上述配置后出现服务起不来,看下自己docker的版本是不是过低导致,可以使用
"graph":"/data/docker"试试
情况二:已经有镜像再运行
- 此时比较麻烦的是,不论是docker服务本身还是镜像层,我们一般都会使用持久化方式去运行,所以不能只是修改配置就能处理的
新增数据盘路径为 /liujiangxu
- 删除目前所运行的镜像,避免后续镜像启动失败
1
| [root@ceshi-128 ~]# docker rm -f $(docker ps -aq)
|
- 停止服务
1
| [root@ceshi-128 ~]# systemctl stop docker
|
- 修改配置文件,增加挂载路径
1 2 3 4
| [root@ceshi-128 ~]# vi /etc/docker/daemon.json { "data-root":"/liujiangxu/docker" }
|
- 移动默认挂载目录(默认路径下存储之前docker持久化的文件,比如镜像、网络、卷等自身信息)不做这部后面你会发现服务起来是空的,什么也没有
1
| [root@ceshi-128 ~]# cp -rp /var/lib/docker /liujiangxu/docker #避坑,这块必须保留原属性复制或者直接mv
|
- 重启docker服务
1
| [root@ceshi-128 ~]# systemctl restart docker
|
- 查看服务docker目录信息,成功替换
1 2
| [root@ceshi-128 grafana]# docker info | grep Dir Docker Root Dir: /liujiangxu/docker
|
- 将原镜像文件移动至新盘目录中(也可以不用做7.8步骤,因为我原分区空间不够都需要移动)
1
| [root@ceshi-128 ~]# cp -rp /data/grafana/ /liujiangxu/
|
- 修改原镜像文件持久化挂载路径”volumes”,
1 2 3 4
| version: "3.5" .... volumes: - /liujiangxu/grafana/data:/var/lib/grafana
|
- 查看镜像启动挂载文件,已经发生改变
1 2 3 4 5 6
| [root@ceshi-128 grafana]# docker-compose -f grafana.yaml up -d
[root@ceshi-128 grafana]# docker inspect grafana | grep liujiangxu "ResolvConfPath": "/liujiangxu/docker/containers/b6830e8302e4863985e297824091b2020cb984c8f3373596ac895529ed6466d0/resolv.conf", "HostnamePath": "/liujiangxu/docker/containers/b6830e8302e4863985e297824091b2020cb984c8f3373596ac895529ed6466d0/hostname", "HostsPath": "/liujiangxu/docker/containers/b6830e8302e4863985e297824091b2020cb984c8f3373596ac895529ed6466d0/hosts",
|
修改目录后权限错误补充
- 当我们在以上属于第二种情况时,应当按照cp -rp或者直接mv的方式去移动整体目录,这样会避免权限带来的困扰。
- 比如我修改后出现zabbix服务起不来,什么改动都没做,后台大量报错Permission denied,而且报错的路径都不属于手动挂载的,后来发现我在复制/var/lib/docker目录时没有保留属性导致出现了次问题
1 2 3 4 5 6 7 8 9 10
| zbx-server | ** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenIP": ''...sed: couldn't open temporary file /etc/zabbix/sedVYDwlU: Permission denied zbx-server | removed zbx-server | ** Updating '/etc/zabbix/zabbix_server.conf' parameter "ListenPort": ''...sed: couldn't open temporary file /etc/zabbix/sedjgsXxU: Permission denied zbx-server | removed zbx-server | ** Updating '/etc/zabbix/zabbix_server.conf' parameter "SourceIP": ''...sed: couldn't open temporary file /etc/zabbix/sedkUZJyU: Permission denied zbx-server | removed zbx-server | ** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogType": 'console'...sed: couldn't open temporary file /etc/zabbix/sedEQ9xXT: Permission denied zbx-server | added zbx-server | ** Updating '/etc/zabbix/zabbix_server.conf' parameter "LogFile": ''...sed: couldn't open temporary file /etc/zabbix/sedFKp97T: Permission denied zbx-server | removed
|
解决方式
- 我这边比较简单粗暴使用docker system prune -a 命令(清理本地所有未使用的镜像及持久化文件)。而上述报错的主要原因就是overlay2目录下还存在之前zabbix镜像所遗留的持久文件导致权限问题。清理之后再重新下载镜像就没问题了