2017-02-21 71 views
2

我知道類似的問題之前已經被問到過,但我找不到任何正確的東西。我也曾在Docker社區論壇上發過帖,但沒有人能提供幫助。簡單的腳本需要刪除4周以前的所有碼頭圖像

我無法使用新的docker image prune命令,因爲我無法從當前版本1.11.2升級到最新的1.13版本,但我需要一個簡單的腳本,可以在cron下運行以刪除所有圖像,是否懸掛,超過1個月大。我不需要擔心容器,因爲這是來自只存儲圖像的回購。

如果泊塢窗圖片報「4周」爲「1月」這將是簡單的,我可以使用類似

docker images | grep " [months]* " 

和管道輸出到docker rmi命令。然而,由於它看來是在「星期」中報告長達11周,而且只有在「月」裏,一旦形象是3個月或更長,我不能這樣做。

docker images | grep " [months|weeks]* ago" | awk '{print $3,$4,$5}' 

會給我這個輸出::

6828f152f9cc 2 weeks 
52a7412befd3 2 weeks 
04c2b29e5e08 2 weeks 
cdfb37d22663 2 weeks 
ca38a8cabb2b 3 weeks 
8b043f2395ba 3 weeks 
2aa8b20380a0 3 weeks 
1ac7dcf35935 9 weeks 
f80873c4845b 9 weeks 
d5700d37ee95 9 weeks 
594dc21de8de 9 weeks 
0c9dacb7fa7c 10 weeks 
11f3eec60e17 3 months 
b13ebf1a4999 3 months 
68b0d6a3be3b 7 months 
baadc9c8b0ce 8 months 
10eb0d6b2b99 9 months 

...但我被困在試圖找出如何測試4,$ 5只包含任何要麼「月」或> =「4周」,然後可以通過泊塢員rmi。任何人都可以做到這一點的任何線索簡單的代碼,請嗎?

+0

我寧願用'泊塢窗檢查$(搬運工圖像-Q)',找到必填字段 – user2915097

回答

2

這裏是一個腳本,你可以在你的.bashrc寫

#!/bin/bash 

max_week_size=4 
docker images | awk 'NR>1 {print $0}' | while read line; do 
    # echo $line 
    id_img=$(echo $line | awk '{print $3}') 

    # if older then a month 
    is_month=$(echo $line | grep 'month') 
    if [ ! -z "$is_month" ]; then 
     echo $id_img 
     docker rmi -f $id_img 
     continue 
    fi 

    # remove older then 4 weeks 
    num_week=$(echo $line | grep "week" | awk '{print $4}') 
    if [ ! -z "$num_week" ] && [ $num_week -ge $max_week_size ]; then 
     echo $id_img 
     docker rmi -f $id_img 
    fi 
done 
1

試試這個(僅使用awk):使用if語句

docker images |awk '{if (($4 > 4 && $5 == "weeks") || ($4 > 1 && $5 == "months")) {print $3,$4,$5}}' 

1m,並用括號保證執行順序。

不需要grep

+0

感謝法哈德,但沒有工作 - 它錯過了那就是圖像10周齡。 – HelenH

+0

請嘗試編輯的答案。 –

+0

現在有效,謝謝 – HelenH

3

只是awk需要:

docker images |awk '$5=="months" || ($4>4 && $5=="weeks") {print $3,$4,$5}' 

說明

如果第5場是 「幾個月」 ,或者等於「星期」,第四次大於4,則打印所需的列。

1

我個人更喜歡下面的bash函數:

docker_housekeeping() { 

    # Collect list of images older than 4 weeks. 
    OLD_IMAGES=$((docker images | 
       grep -P "(months|[4-9] weeks|\d\d+ weeks)" | 
       awk '{print $3}')) 

    # Remove old images. 
    docker rmi ${OLD_IMAGES[@]} 
} 

你可以貼到你的.bashrc並調用它像你想要做清理docker_housekeeping每次。

0

您可以使用-f標誌添加過濾器。

找到大於4周齡的圖像id。並執行以下命令

docker rmi $(docker images -q -f "before=<docker_image_id_older_than_4_weeks>")

相關問題