Docker overlay2 清理 & 數據轉移
今天項目的生產環境不穩定,登錄到服務器上發現Docker的/var/lib/docker/overlay2目錄將磁盤占用滿了,導致程序分配不到內存。
要判斷是否占用滿了磁盤,可以使用
# 查看Docker系統位置 docker info | grep 'Dir' # 查看文件占用信息 du -sh /var/lib/docker/* # 查看Docker的磁盤使用情況 docker system df
從上面的信息發現docker並沒有占滿全部的磁盤,遂使用 du -sh 查看發現,overlay已經100%了。
清理文件
通過以上信息發現基本都是docker容器的占用。這時繼續查看到底是什么占用如此巨大。經排查發現是容器內的應用生成了大量的日志。
# 找出目錄下大於30M的文件 find * -type f -size +30M -print0 | xargs -0 du -sh # 批量刪除日志文件 find * -type f -size +30M -print0 | xargs -0 du -sh | grep '/diff/root/logs/csp/sentinel-record.log' | awk '{ print $2 }' | xargs rm -rf
數據轉移
從目前的情況來看,docker默認將文件及其容器放置在了系統盤的掛載區內,這時我們需要將其挪至外掛磁盤上。
數據轉移前需要將已有的容器備份,因為我的程序在之前就將重要的容器掛載到了外部磁盤,所以這里略過。
# 停止容器 systemctl stop docker # 修改容器配置 cat /etc/docker/daemon.json { "registry-mirrors": ["https://wkumpv63.mirror.aliyuncs.com"], "data-root": "/data/docker-data", "storage-driver": "overlay2" } # 啟動容器 systemctl start docker systemctl enable docker