架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3234|回复: 6

【实战】Docker 日志占满磁盘和数据迁移

[复制链接]
发表于 2022-2-7 10:21:43 | 显示全部楼层 |阅读模式
同事反应测试环境系统登录不上去了,果断查看监控,发现服务端口是通的,登录服务器查看硬盘使用情况发现某个磁盘挂载的目录已经被占满,如下图:

QQ截图20220128142138.jpg

磁盘 100% 正是 docker 应用所使用的磁盘,初步怀疑是无法写入日志文件导致模块无法正常对外提供服务。

CentOS 统计每个文件夹大小,查找大文件
https://www.itsvse.com/thread-9542-1-1.html
查找大文件,最终定位到在 /var/lib/docker/containers/ 子目录下面的某个 json.log 文件占用了 30G

清理正在运行的容器日志(治标)

为了让容器立马能正常提供服务。临时解决方案,快速清理此类文件,释放硬盘空间,脚本如下:

如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。

备注:请在有空余的磁盘的目录下新建,否则无法正常创建脚本


设置Docker容器日志大小(治本)

设置一个容器服务的日志大小上限,在启动容器的时候增加一个参数设置该容器的日志大小,例如:

max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。


Docker 迁移到新的磁盘

docker 相关数据都存在了系统盘,系统盘只有 50G 的大小,数据盘有 100G 的大小,如何将 docker 已有的数据迁到到数据盘呢?

使用 CentOS 系统 yum 方式安装的 docker,默认的安装目录应该是:/var/lib/docker

Docker 版本 < v17.05.0

因为 dockerd 运行 Docker 服务的时候可以通过参数 graph 指定镜像和容器存放路径,比如:–graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可。

Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致,在 Ubuntu 中的位置是:/etc/default/docker,在 CentOS 中的位置是:/etc/sysconfig/docker。

Docker 版本 >= v17.05.0

因为 Docker 官方在这个发行版本就 deprecated 了 graph 这个 feature,所以如果你机器上安装的 Docker 版本 >= v17.05.0,则无法通过在 /etc/default/docker 配置文件中指定 graph 参数来修改 Docker 的默认安装(存储)目录了。

新版本的 Docker 还有其他方式可以达到我们修改安装(存储)目录的目的:通过修改(新建)/etc/docker/daemon.json,指定 data-root 参数的值。

Docker 守护进程目录配置:https://docs.docker.com/config/daemon/

迁移前准备:停止所有容器应用和停止 docker 服务(systemctl stop docker)。


Docker 查看容器 restart 设置和批量停止容器
https://www.itsvse.com/thread-10130-1-1.html
新建 /home/software 目录,命令如下:

将 /var/lib/docker 目录迁移到 /home/software/docker 目录(建议复制,等没问题了,再删除 /var/lib/docker 目录文件),命令如下:

复制的时候一定要加 -a 参数,否则有些容器无法正常运行!!!!!

查看当前目录下的所有软连接和文件的指向,命令如下:


修改 /etc/docker/daemon.json 文件,命令如下:

QQ截图20220207101834.jpg

保存,然后启动 docker 服务,命令如下:

启动容器,测试都可以正常运行,最后,删除 /var/lib/docker 文件夹

QQ截图20220128172119.jpg

(完)




上一篇:查看 Linux 系统开机关机时间
下一篇:Spring Cloud Gateway 内置的过滤器工厂
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-2-13 16:36:29 | 显示全部楼层
学习学习。。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-2-24 09:38:26 | 显示全部楼层
docker 如何删除 none 镜像
https://www.itsvse.com/thread-10112-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-2-24 13:21:48 | 显示全部楼层
列名
描述
CONTAINER ID和Name容器的 ID 和名称
CPU %和MEM %容器正在使用的主机 CPU 和内存的百分比
MEM USAGE / LIMIT容器正在使用的总内存,以及允许使用的内存总量
NET I/O容器通过其网络接口发送和接收的数据量
BLOCK I/O容器从主机上的块设备读取和写入的数据量
PIDs容器创建的进程或线程数


QQ截图20220224132106.jpg
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2022-3-25 14:45:13 | 显示全部楼层
通过查询 /var/lib/docker/containers/xxxx/config.v2.json 文件的 Name 值,可以找到对应的容器应用。



QQ截图20220325144354.jpg
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-12-7 14:17:31 | 显示全部楼层
【实战】Docker 日志占满磁盘和数据迁移
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-4-17 09:59:49 | 显示全部楼层
docker 单独清空某一个容器的日志,命令如下:

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-20 19:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表