docker - Jenkins 和 Docker 设备上没有空间 - 如何正确清理

标签 docker jenkins jenkins-plugins cloudbees jenkins-docker

我们在 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/

相关文章:

jenkins - octopus 中的包 ID 是什么?

Jenkins 忽略趋势图配置

php ftp_get() 在 Docker 容器中不起作用

docker - 相对路径不适用于 docker-compose.yml 中的命名卷

angularjs - Docker 和 Angular 应用程序 : one or two containers?

java - 如何使用 Jenkins 的 groovy 自动安装 Maven 和 Java JDK8?

docker - 什么是docker-compose中的docker run -e等效项

jenkins - 将新的本地用户添加到已配置 Active Directory 的 jenkins

Jenkins 发布者 postBuildScripts 不起作用

groovy - 使用 Jenkins DSL 添加参数 "Build Selector for Copy Artifact"