shell - 通过从属服务器上的Jenkins Shell清洁Docker容器

标签 shell jenkins docker continuous-integration containers

我们有一个场景,我们构建使用多个Docker镜像和容器的产品。

我们的Jenkins环境构建了各个组件,将它们打包在容器中,然后(通常)将它们部署到测试实例。不幸的是,使这些测试实例变得干净已成为我无法解决的问题。

从站是Ubuntu 14.04(Trusty Tahr)和Ubuntu 16.04 LTS(Xenial Xerus)。 Docker是这些构建的最新稳定版本(1.12.3)。

假设Jenkins用户已正确地放入从设备中,并且通过sudoers文件具有sudo权限以运行Docker命令。该用户也位于docker组中。由于我们从通过Docker Compose创建的一组正在运行的容器开始,因此我们将这些容器作为Jenkins Shell脚本停止,其开始于:

docker-compose stop

然后,使用以下命令删除这些容器和关联的卷:
docker-compose rm -fv

现在是时候删除图像了,因为我们要在它们的位置上放下一组新图像。在这里,我的代码已经改进,但是效果不佳。

我目前正在执行以下操作:
dockerimagesoutput="$(sudo docker images -q | sort | uniq)"
if [ ! -z "$dockerimagesoutput" ]; then
    sudo docker rmi "${dockerimagesoutput}"
  fi

当它在奴隶上运行时,我以
sudo docker images -q
+ sort
+ uniq
+ dockerimagesoutput=01b1b8ea71f4
027c45033c40
0b17fb320c4f
182d60ace820
19a515d76e88
.
.
.
c10984351e73
c2c4b1989875
c95d5afc74e2
ca82cd3aa0d4
d0521df160d4
d99ef18f88fd
e01106d204cb
e0b4f8e0248d
f0a4e63c158c
f14a297b157d
f7dbb67755a8
fe35996d49e9
ff1f30708195
+ [ ! -z 01b1b8ea71f4
027c45033c40
0b17fb320c4f
182d60ace820
19a515d76e88
27f52880c6e2
2af6e3c3e3d7
.
.
.
8d6bfee5cecd
8f244f8ae3db
8f72d2d366e9
9393b391526a
97f2023dcc65
a4d2bb5d4d52
ab4148bd2fb9
aee91e3b71a7
b34b797e9fe6
b4d1c74da310
c10984351e73
c2c4b1989875
c95d5afc74e2
ca82cd3aa0d4
d0521df160d4
d99ef18f88fd
e01106d204cb
e0b4f8e0248d
f0a4e63c158c
f14a297b157d
f7dbb67755a8
fe35996d49e9
ff1f30708195 ]
+ sudo docker rmi 01b1b8ea71f4
027c45033c40
0b17fb320c4f
182d60ace820
19a515d76e88
27f52880c6e2
2af6e3c3e3d7
306ad873c7d8
3258b6beb926
4890da71db50
4aa966f33a88
4f9a28709c33
524ef9a2e9fd
549a9df5d9c4
594ea008ad1c
5ac2e713a1e6
62351a723b50
688715837b4c
.
.
.
9393b391526a
97f2023dcc65
a4d2bb5d4d52
ab4148bd2fb9
aee91e3b71a7
b34b797e9fe6
b4d1c74da310
c10984351e73
c2c4b1989875
c95d5afc74e2
ca82cd3aa0d4
d0521df160d4
d99ef18f88fd
e01106d204cb
e0b4f8e0248d
f0a4e63c158c
f14a297b157d
f7dbb67755a8
fe35996d49e9
ff1f30708195
Error response from daemon: page not found

我无法知道是哪个图像导致此页面未找到错误,是吗?还是有一种更干净的方法从我的从机上删除所有图像以重新开始?

最佳答案

要清理图像(请注意,这将强制清理所有内容),您可以使用

docker images -qa | xargs docker rmi -f

要清理容器,您可以使用
docker ps -qa | xargs docker rm -f

同样,这将强制清理所有容器,即使它们正在运行。您可以使用--filter参数过滤容器,即仅退出已存在的容器
docker ps -qa --filter "status=exited" | xargs docker rm -f

Spotify的家伙们还提供了一个不错的软件包docker-gc,它将为您解决这个问题。

编辑docker现在也可以使用 system prune 命令。

Remove all unused containers, volumes, networks and images (both dangling and unreferenced).

关于shell - 通过从属服务器上的Jenkins Shell清洁Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40832500/

相关文章:

linux - linux 中的 sed 命令

linux - 如何在 *nix 上查找/grep 目录名称匹配 "x"但不匹配 "y"的所有路径?

continuous-integration - Jenkins 相关问题-复制工件

amazon-web-services - 在 EventBridge 的 Fargate 容器中使用命令

python - 清洁 Docker pip 安装导致错误 : THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE

docker - 如何快速更新正在运行的 docker-compose 容器

bash - 在 bash 循环脚本中,如何在同一行刷新输出? (取最后输出的位置)

shell - 批量检测系统是 32 位还是 64 位

Jenkins - Gitlab 集成问题

python - 名称错误 : name 'python3' is not defined [Jenkins]