我想從 docker 中洗掉帶有標簽的非最新中間影像。我使用了下面的命令,如果有超過 1 個影像,它可以作業,但如果只有 1 個影像,那么它正在洗掉該影像,并且將從下一次構建中再次快取。我是 Bash 腳本的新手,任何幫助將不勝感激。
我想要的是
if image_ids_with_label>1:
delete_nonlatest_images
else:
pass
重擊命令
docker images --filter "label=ImageName="$LabelName --format '{{.CreatedAt}}\t{{.ID}}' | sort -nr | tail -n -1 | cut -f2 | xargs --no-run-if-empty sudo docker rmi
uj5u.com熱心網友回復:
一個好的解決方法可能是用一個簡單的 Awk 腳本替換管道,如果只有一行,該腳本不會列印任何內容。
docker images --filter "label=ImageName=$LabelName" --format '{{.CreatedAt}}\t{{.ID}}' |
sort -nr |
awk -F '\t' 'END { if(NR>1) print $2 }' |
xargs --no-run-if-empty sudo docker rmi
還要注意$LabelName引號內的內容,以防萬一它包含 shell 元字符。(另請參閱何時在 shell 變數周圍加上引號。)
您使用的嘗試tail -n -1僅列印最后一行;如果您真的想列印除第一行之外的所有行,那就是
awk -F '\t' 'NR>1 { print $2 }'
(并且相應的tail呼叫將是tail -n 2)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527371.html
標籤:重击码头工人
