ted*_*r42 33 amazon-web-services docker coreos
我通过CoreOS和AWS的ECS运行docker.我有一个失败的图像多次重新启动,容器仍然在周围 - 他们填满了我的驱动器分区.具体来说,/var/lib/docker/overlay/包含大量文件/目录.
我知道docker-cleanup-volumes是一个东西,但它清理/ volumes目录,而不是/ overlay目录.
docker ps -a显示我的坏Docker容器超过250次启动尝试.但他们没有跑步.
除此之外rm -rf /var/lib/docker/overlay/*,我该如何/我应该清理它?
use*_*109 28
从我们这边我们使用:
sudo docker system prune -a -f
Run Code Online (Sandbox Code Playgroud)
哪个省我3Go!
我们还使用着名的命令:
sudo docker rm -v $(sudo docker ps -a -q -f status=exited)
sudo docker rmi -f $(sudo docker images -f "dangling=true" -q)
docker volume ls -qf dangling=true | xargs -r docker volume rm
Run Code Online (Sandbox Code Playgroud)
我们把它放在cron上来管理我们的磁盘空间.
干杯
参考:https: //forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604/4
ted*_*r42 11
这是我现在正在做的黑客方式.我不会接受它作为答案,因为我希望有更好的方法.
# delete old docker processes
docker rm `docker ps -a | grep Exited | awk '{print $1 }'`
ignore_errors: true
# delete old images. will complain about still-in-use images.
docker rmi `docker images -aq`
Run Code Online (Sandbox Code Playgroud)
这不是真的!
/var/lib/docker/overlay2顾名思义,包含一堆overlay文件系统(这里有很好的介绍)。运行mount | grep overlay2,您将看到所有/var/lib/docker/overlay2/*/merged文件夹都是类型为 mount 的overlay。这意味着所说du的不是真实的。为了了解这些文件夹(在磁盘上)实际使用了多少空间,您需要将注意力限制在upperoverlayfs挂载的目录(diff在docker的情况下称为),例如:
du -sch /var/lib/docker/overlay2/*/diff
...
3.8G total
Run Code Online (Sandbox Code Playgroud)
作为比较,就我而言:
> du -sch /var/lib/docker/overlay2
...
17G total
Run Code Online (Sandbox Code Playgroud)
更新
看来您也可以简单地使用du's -x/--one-file-system选项(“跳过不同文件系统上的目录”)来仅查看真实部分:
> du -schx /var/lib/docker/overlay2
Run Code Online (Sandbox Code Playgroud)
我已经在我的开发环境中将它添加到bashrc中,并且习惯于每天运行它.
function cleanup_docker() {
docker ps -f status=exited -q | xargs -r docker rm
docker images -f dangling=true -q | xargs -r docker rmi
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,以下脚本可以释放更多空间,因为它会尝试删除所有图像,并且只是无声地失败:
function cleanup_docker_aggressive() {
for i in $(docker images --no-trunc -q | sort -u)
do
docker rmi $i 2> /dev/null
done
}
Run Code Online (Sandbox Code Playgroud)
可悲的是,它们并不比你的解决方案更清洁.
编辑:从Docker 1.13开始,您可以使用docker系统:
docker system df # to check what is using space
docker system prune # cleans up also networks, build cache, etc
Run Code Online (Sandbox Code Playgroud)
编辑:从Docker 2017.09开始,您还可以使用容器和图像
docker container prune
docker image prune -a
Run Code Online (Sandbox Code Playgroud)
后者你可以使用像花哨的过滤器 --filter "until=24h"
码头工人
- 安静的
- 全部
--过滤器状态=已退出
码头工人
docker 图片
docker rmi
你的hacky方式没问题。
docker rm `docker ps -a | grep Exited | awk '{print $1 }'`
Run Code Online (Sandbox Code Playgroud)
我的黑客方法是
docker rm $(docker ps --all | awk '/ago/{print $1}')
Run Code Online (Sandbox Code Playgroud)
docker ps一种稍微简洁的方法是使用(-q) 标志运行--quiet以仅获取 id 号并--filter status=exited仅过滤已退出的 id 号。
docker rm $(docker ps --filter status=exited --quiet) # remove stopped docker processes
Run Code Online (Sandbox Code Playgroud)
docker rm或者使用--force(-f) 标志运行并docker ps使用--all(-a) 标志甚至关闭正在运行的程序
docker rm --force $(docker ps --all --quiet) # remove all docker processes
Run Code Online (Sandbox Code Playgroud)
在几次失败的构建之后,可能占用所有磁盘空间的是映像。为了节省 docker 主机上的磁盘空间,请定期删除未使用的 docker 镜像
docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images
Run Code Online (Sandbox Code Playgroud)
或者为了变得更激进,您可以--force(-f) 它来清理--all(-a) 图像
docker rmi --force $(docker images --all --quiet) # clean all possible docker images
Run Code Online (Sandbox Code Playgroud)
@analytik 将其放入.bashrc函数的方法似乎是一个实用的想法
function cleanup_docker() {
docker rm --force $(docker ps --all --quiet) # remove all docker processes
docker rmi $(docker images --filter dangling=true --quiet) # clean dangling docker images
}
Run Code Online (Sandbox Code Playgroud)
如果您习惯生成大量不需要的 docker 镜像,请将其添加到.bash_logout
小智 5
我们刚开始遇到这个问题,而btafarelo的回答让我有些困惑,或者至少让我对删除sha256条目感到更好。
系统信息:在ELB后面运行CoreOS 1.12的ec2实例
关闭码头工人
systemctl stop docker
rm -rf /var/lib/docker/overlay/*
Run Code Online (Sandbox Code Playgroud)执行命令的结果
for d in $(find /var/lib/docker/image/overlay -type d -name '*sha256*'); do echo rm -rf $d/* ; done
Run Code Online (Sandbox Code Playgroud)重新启动(最简单的方式来恢复所有内容)
重新启动服务后,这恢复了大约25%的磁盘,而没有不良影响。
| 归档时间: |
|
| 查看次数: |
34115 次 |
| 最近记录: |