2016-11-27 67 views
1

我們有一個場景,我們建立一個使用多個碼頭圖像和集裝箱的產品。我們的Jenkins環境構建單個組件,將它們打包到容器中,然後(通常)將它們部署到測試實例中。不幸的是,讓這些測試實例變得清潔已經成爲我遇到問題時遇到的問題。通過jenkins外殼在奴隸上清潔碼頭集裝箱

奴隸是Ubuntu 14.04和16.04 LTS。 Docker是這些版本的最新穩定版本(1.12.3) 假設jenkins用戶已正確連接到從屬設備,並通過sudoers文件擁有sudo權限來運行docker命令。用戶也在碼頭組中。因爲我們開始與正在運行的一套經泊塢窗,撰寫創建容器,我們停止容器作爲詹金斯shell腳本開始

泊塢窗,撰寫停止

然後我們去掉那些容器和相關卷與

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 

有沒有辦法,我知道哪個圖像是導致此頁面未找到錯誤,是嗎?還是有更清晰的方法可以從我的奴隸機器中刪除所有圖像以重新開始?

+0

您可以用'xargs'(有點慢) '泊塢窗PS -qa | xargs docker rmi -f' – Rik

+0

容器是否與圖像具有相同的散列?我一直認爲他們是兩個獨立的實體,但也許我沒有仔細閱讀文檔。 – Kevin

+0

對不起,我是他們的錯。所以它是'docker images -qa | xargs docker rmi -f'和'docker ps -qa | xargs docker rm -f' – Rik

回答

1

清理圖片(請注意,這將迫使清理一切),可以使用

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命令可用。

刪除所有未使用的容器,卷,網絡和圖像(包括懸掛和未引用)。

0

docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)?如果需要sudo,只需在docker之前添加它即可。

+0

這將刪除容器,但不是用於創建它的映像。 Docker-compose拉入圖像來構建容器。我殺了容器;這是關於奴隸機器上留下的圖像。 – Kevin

0

我有詹金斯碼頭奴隸機器,我建立圖像,並將其推送到ECR存儲庫。 上述命令幫助我清除了從機中的所有圖像和容器。

  1. 碼頭圖像-qa | xargs docker rmi -f(clean images)
  2. docker ps -qa | xargs的泊塢窗RM -f(乾淨的容器)

感謝@Rik