我们在 Ubuntu 16.04.1 服务器上运行 Jenkins(版本 2.60.1)。我们最近遇到的问题之一是我们经常收到错误“设备上没有剩余空间”。
我了解在使用 Docker 时,由于遗留的文件占用了不必要的空间,因此需要进行严格的清理过程。
我们使用 CloudBees Docker 构建和发布插件 来处理构建并推送到 AWS ECS。我想过删除所有未使用的图像。问题是,如果我登录到 Jenkins 实例(通过 SSH)并尝试运行它提供的 docker 命令 - “无法连接到 Docker 守护进程。docker 守护进程是否在此主机上运行?”
我想我需要在 Jenkins 环境或插件的一部分中执行此操作?
以前有人处理过这个问题或有什么建议吗? - 非常感谢。
最佳答案
docker <1.13
对于早于 1.13 的 Docker,您可以执行以下操作来清理设备上的一些空间:
docker ps -a | grep -i 'exited' | awk '{print $1}' | xargs docker rm > /dev/null 2>&1 &
docker images -a | grep "<none>" | awk '{print $3}' | xargs docker rmi > /dev/null 2>&1 &
或者,您可以尝试运行以下 docker 命令:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
它将清理旧的孤立容器并删除标记为 <none>
的图像.我在我的一台 CI 服务器上使用这两个公式,它工作正常。在此之前,我遇到了与您类似的问题(设备上没有剩余空间)。
清理孤立卷
docker volume rm $(docker volume ls -qf dangling=true)
docker volume ls -qf dangling=true | xargs -r docker volume rm
Docker >= 1.13
Docker 1.13 引入 docker system prune
命令(https://docs.docker.com/engine/reference/commandline/system_prune/)。或者,您可以运行:
-
docker image prune
-
docker volume prune
-
docker container prune
您可以将这些命令作为 Jenkins 管道的一部分运行。在我从事的一个项目中,我们在发布过程中构建新的 Docker 镜像后运行清理。尝试修复“无法连接到 Docker 守护程序。Docker 守护程序是否在此主机上运行?”问题。
关于docker - Jenkins 和 Docker 设备上没有空间 - 如何正确清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45128781/