gpt4 book ai didi

docker - 如何自动删除未使用的 docker 镜像和容器?

转载 作者:IT老高 更新时间:2023-10-28 21:41:27 30 4
gpt4 key购买 nike

有没有办法指示 docker swarm 自动运行垃圾收集并删除所有悬空的图像和容器?我运行 docker stack rm STACK_NAME 并重新部署堆栈,但这会保留未使用的对象。我知道我可以运行 docker prune做清洁,但有没有办法指示 docker 自动这样做?

P.S 我尝试根据 post 设置历史保留限制

最佳答案

prune 是你得到的最好的,并且需要通过其他方式在每个节点上实现自动化,因为 Swarm 内部还不能为你做这件事。 但有了服务,以及 Bash 单行和全局模式,这很容易解决:

90% 的时间是旧图像占用了空间,由于我们使用的是 Swarm,我们不想在 Swarm 服务之外的主机上做任何事情,所以让我们运行一个简单的单行在一个每天在每个节点上修剪一次图像的服务中:

docker service create --name prune-images --mode global --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock docker sh - c "虽然为真;做 docker image prune -af; sleep 86400;完成"

注意我不会手动删除容器,而是使用任务历史限制来控制它。让旧任务继续存在(这使您可以检查它们的退出代码/错误并显示它们的日志)。每个服务的默认值为 5,因此如果要将集群中的所有 Swarm 服务更改为 2:

docker swarm update --task-history-limit=2

然后旧容器会更早清理,它们使用的旧图像会被 prune 捕获。请注意,历史记录包括正在运行的历史记录,因此限制为 2 意味着单个关闭容器将挂起(包括其检查元数据和日志)。

关于docker - 如何自动删除未使用的 docker 镜像和容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49197246/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com