docker部署项目,/var/lib/docker/overlay2目录满了怎样清理?
一、问题本日忽然发现跑服务器上的项目挂了,上去看了一下原来是磁盘满了。
df -h
https://img-blog.csdnimg.cn/direct/2216189e9e22462ca1d5e6065fe443ac.png
看来是目录 /var/lib/docker/overlay2 下占满了磁盘,看看里面是什么。
二、办理
1、查察 /var/lib/docker 目录
这一块只是查找哪些文件占满了磁盘,不感兴趣的朋侪可以不看。
/var/lib/docker 目录是 docker 的默认目录,进去看看
cd /var/lib/docker
检索文件的最大深度1,即只检索汇总盘算当前目录下的文件
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/0604d6dd9c4a4af48f32a14c33c26d8f.png
(1)、containers 目录
可以看到 containers 中占磁盘空间最大,这是 docker 存储镜像的目录,进去看看里面有什么
https://img-blog.csdnimg.cn/direct/701f9cd807af41ed8351e86954103f6e.png
看不出什么来,继承进入
https://img-blog.csdnimg.cn/direct/4427c2f895a248089176c8762db73bc5.png
可以看到一个 -json.log 的文件很大,竟然有4G多,这是 docker 的日志文件,看看 containers 目录的其他子目录是不是也有这个类型的文件
https://img-blog.csdnimg.cn/direct/12635b8bd08e42909d2708030cdf5dc1.png
看来也有,并且和所在目录同名,直接查察所有的 -json.log 目录吧
du -ha /var/lib/docker/containers/ | grep "json.log" | sort -rh
https://img-blog.csdnimg.cn/direct/c3e830f64e764e6ba23fac2ace2ded61.png
嗯。。。各个都不小,把他们全清了也能清出来很可观的空间了。
等会停了容器再清。
(2)、volumes 目录
这里接着看看 volumes 目录
https://img-blog.csdnimg.cn/direct/bf70346390dd4a32bd52fd2d2cdbf034.png
看到也是类似 containers 目录的东西,先进第一个看看
https://img-blog.csdnimg.cn/direct/c76597cc70544ee08a46057c7e4141c5.png
可以看到是一个 _data 目录,看不出什么,继承进入
https://img-blog.csdnimg.cn/direct/d05449e3b31f438ea4db292ecf50596b.png
此中 flow.jar 是我的jar包,目录 logs 应该就是日志文件了,进去看看
https://img-blog.csdnimg.cn/direct/cc992e6eadc5480a8d77ff48f8cea2bc.png
还放在我的包名命名的目录里,继承进入
https://img-blog.csdnimg.cn/direct/9478c9076976492cb6e1cdc36afc7d3d.png
也是很多的日志文件。。。回到 logs 目录统计一下吧
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/8f481449303d40adac1f88afa145404b.png
可以看到有5G多。。。
同样的方式进入 volums 目录中的第二个子目录
https://img-blog.csdnimg.cn/direct/0dca7b10fc80445bb51172c2d0094354.png
可以看到也有2G多。。。
也可以直接查察目录的详细信息,下令如下:
du -ha /var/lib/docker/volumes/ | grep "info.*.log" | sort -rh
https://img-blog.csdnimg.cn/direct/296c753946934673a39174d6fe1f3404.png
可以看到有很多的日志文件,单个固然不大,但却很多。
这里也先不清,后面再清。
(3)、overlay2 目录
再看看 overlay2 目录
https://img-blog.csdnimg.cn/direct/a3e871a5e6e049fd972f1ce043bb1ed5.png
固然只有11G,但进去发现目录挺多,先看看各个目录的大小
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/881b254d7740497a8f043bf7fce0b6a8.png
找出最大的应该目录,看看里面有什么
https://img-blog.csdnimg.cn/direct/b1def6ae76234e02af48327fe4095915.png
看看哪个文件夹比较大
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/a9f90312724e491aadb6e3cbde17a403.png
可以看到 merged 和 diff 占磁盘空间比较大,work 目录可以不用管。
diff :
diff 文件夹是一个只读的文件体系层,它包罗了Docker镜像的变更内容。当您对容器举行修改或添加新文件时,这些变更会被记载在 diff 文件夹中。每个Docker镜像都有一个对应的 diff 文件夹,用于存储与底子镜像的差异。
merged:
merged 文件夹是一个可读写的文件体系层,它是由底子镜像和 diff 文件夹合并而成的。当您启动一个Docker容器时, merged 文件夹中的内容将作为容器的文件体系。这个文件夹是容器运行时的可写层,您可以在容器中对文件举行修改或添加新文件,这些修改将存储在 merged 文件夹中。
2、清理
前面已经知道了日志在
/var/lib/docker/containers
/var/lib/docker/volumes
/var/lib/docker/overlay2
(1)、清理 /var/lib/docker/containers 目录
先创建清理脚本文件,这里名为 docker_logs_clean.sh ,可以自界说,下令如下:
touch docker_logs_clean.sh
https://img-blog.csdnimg.cn/direct/ac78b062ccbd47148d9a600292c03826.png
查察文件可以发现 docker_logs_clean.sh 是只读的
https://img-blog.csdnimg.cn/direct/ed93b934322343d28e4cce2c1c25f093.png
赋予读写权限,下令如下:
chmod +777 docker_logs_clean.sh
https://img-blog.csdnimg.cn/direct/c1a276cd638c46479456fcc00462a306.png
然后在加入如下脚本:
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean containers logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
这是从这个老哥的博客中拿到的,很多博客都说这个脚本可以清除还在运行的docker日志,保险起见,我这里就先把运行的容器给停了。
之后实行脚本文件,下令如下:
sh docker_logs_clean.sh start
https://img-blog.csdnimg.cn/direct/76246d7af34940b3a1cf25be4682864a.png
再看一下磁盘空间:
df -h
https://img-blog.csdnimg.cn/direct/99cd110df640482a898540b1d2f882cb.png
可以看到清理出一些空间了。
如果保存时报如下错:
“docker_logs_clean.sh” E514: write error (file system full?)
https://img-blog.csdnimg.cn/direct/e5e5deac03db493386cccedd54ba3dda.png
这是因为磁盘已满,先手动清理一些空间出来。我这里就清除了一下 /var/lib/docker/volumes 目录下的日志文件。
如果实行清理脚本报错:
line 4: syntax error near unexpected token `$‘do\r’
可以用如下下令查察脚本文件换行符是否正当:
cat -v docker_logs_clean.sh
cat -v 文件名:查察换行符是否正当,如果是上述的,则行结尾会是^m
需要转换成linux/unix格式的”\n”
https://img-blog.csdnimg.cn/direct/eec008fafea844b7b61fb21756c29017.png
缘故原由:这大概是在window体系中创建好文件,再上传到服务器,导致换行符不符合Linux的格式。
办理办法:
sed 's/\r//' docker_logs_clean.sh > docker_logs_clean.sh
https://img-blog.csdnimg.cn/direct/9f1bef8511aa42229062604456e1e9a1.png
(2)、清理 /var/lib/docker/volumes 目录
如果不更新项目,只是想清一下日志,前面已经查到 /var/lib/docker/volumes 目录下的日志,这里重新查一下,下令如下:
find /var/lib/docker/volumes -name "*.log"
https://img-blog.csdnimg.cn/direct/72c85bd136ce4b31b8751b1545027c2d.png
利用如下下令清除
find /var/lib/docker/volumes -type f -name "*.log" -delete
https://img-blog.csdnimg.cn/direct/e560e118fa2940b5bba1ede1424e0429.png
可以看到那些日志文件都清除了。
再查抄一下文件docker占比
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/afbfb88be855428db88e5049ba94228e.png
可以看到 /var/lib/docker/volumes 目录只剩下791M了,这些是我的jar包。
如果要更新项目,则清除所有的镜像,下令如下:
docker system prune -a
https://img-blog.csdnimg.cn/direct/5bdea2d327054fcda43ec75008cafe8d.png
输入 y 回车就可以删除了,我利用的是docker-compose部署的微服务,这里就先不删除。
删除所有的卷,下令如下:
docker volume prune
https://img-blog.csdnimg.cn/direct/2f69ca4ad1d942188d1b597426e36117.png
输入 y 回车就可以删除了,我利用的是docker-compose部署的微服务,这里就先不删除。
利用docker-compose时只清除项目镜像和容器,需要 docker-compose.yml 文件所在目录,我这里是 /www/wwwroot/changjing/jar ,下令如下
docker-compose down --rmi all
https://img-blog.csdnimg.cn/direct/fa08cfb4113c4903bdfc3eef9485c193.png
看一下docker-compose的容器
docker-compose ps
以及镜像
docker-compose images
https://img-blog.csdnimg.cn/direct/c4b7d4b3ebd74d57a6055dbb9c171048.png
可以看到容器和镜像都被删除了。
再查察一下 /var/lib/docker 目录的磁盘占比
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/b7dabefea19f46d79f011c8844ff0dc0.png
大概是因为我前面已经清理过日志文件了,看不出什么变化, /var/lib/docker/volumes 目录占791M是jar包。
那再删除一下卷:
docker volume prune
https://img-blog.csdnimg.cn/direct/102be73befb24471a8d9e7cf7f09a79f.png
可以看到 /var/lib/docker/volumes 目录释放了一些空间,应该是把jar包清理了。
再查察一下服务器磁盘空间分布
df -h
https://img-blog.csdnimg.cn/direct/14cf6ce8ca1f4f699cb4e76a8f600225.png
应该清得差不多了。
(3)、清理 /var/lib/docker/overlay2 目录
颠末前面的清理只剩下 /var/lib/docker/overlay2 目录占磁盘空间大一些了,利用删除镜像和容器的下令清理:
docker system prune -a
https://img-blog.csdnimg.cn/direct/fdd82e7122974935831c775a19e3a101.png
清除了2G的空间,再看一下docker磁盘占用
du -h --max-depth=1
https://img-blog.csdnimg.cn/direct/05e9cb199b0a46febfcaa6590ba44252.png
可以看到 /var/lib/docker/overlay2 目录也清理得差不多了。
(4)、限制docker日志大小
按照前面的方式清理,隔一段时间后磁盘又会被docker日志占满,这里设置一下日志上限。
编辑 /etc/docker/daemon.json 文件,第一次应该是没有的,创建就好了,加入如下设置:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true",
"overlay2.size=15G"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "1024m",
"max-file": "3"
}
}
解释:
registry-mirrors:设置镜像加速。
storage-driver:指定Docker的存储驱动,常见的选项包罗 “overlay2”、“aufs”、“btrfs”、“devicemapper” 和 “zfs”,一样平常为 “overlay2”。
storage-opts:存储驱动程序选项。
log-driver:容器日志的默认驱动程序,默认为 “json-file” 。
log-opts:容器默认日志驱动程序选项。
然后重新加载一下docker的设置文件
systemctl daemon-reload
https://img-blog.csdnimg.cn/direct/7b538f49cbd145aa8adcc9ded7e8bbed.png
再重启一下docker
systemctl restart docker
https://img-blog.csdnimg.cn/direct/009ce82ad5d24ff290d172396bfff142.png
留意,重启之后原来的镜像和容器要删除,不然重新启动是报错的!!!
如果启动容器时报如下错就是因为没有重新拉取镜像。
docker: Error response from daemon: open /var/lib/docker/overlay2/2ef38eb701745d5e944dd8c04d404347cd1d7d87140ff48817c935901bcd9550/committed: no such file or directory.
https://img-blog.csdnimg.cn/direct/e40abc7a1eb145c5af0216e01f6e017a.png
如果重启docker失败
https://img-blog.csdnimg.cn/direct/db2e5ea34f8f4eddb1e4ba1e6c32f458.png
报错如下:
docker.socket: Failed with result ‘service-start-limit-hit’.
https://img-blog.csdnimg.cn/direct/a6ee1acceb1b46979101b87ea628c079.png
只要把 daemon.json 的改为 daemon.conf ,下令如下:
mv /etc/docker/daemon.json /etc/docker/daemon.conf
再次重启就好了。
https://img-blog.csdnimg.cn/direct/13487cb6726a4c6ea948c44fe26861d4.png
(5)、限制docker-compose的单个容器日志
这个只有利用docker-compose部署项目标小伙伴才能用到,在每个容器设置下加入如下设置:
logging:
driver: "json-file"
options:
max-size: "256m"
max-file: "3"
https://img-blog.csdnimg.cn/direct/c155091a87924ee8897b6806c825a811.png
然后再利用docker-compose下令启动容器。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]