1、原因
Harbor刪除鏡像后且GC清理后,磁盤空間沒有釋放。因為我們push大量相同標簽的鏡像,Docker 鏡像由標簽引用,並由唯一的摘要標識。這意味着如果myImage
使用標記推送兩個圖像,在DR內部他們顯示的不同,它們將由兩個不同的digests標識。最后推送的Images是當前的。Docker 鏡像由layers組成,每個layers都關聯一個blob。該blob是最占用存儲的文件; 這些文件將由GC清理。正由上面的描述每個鏡像都會存儲一個引用,因為,我們重復提交10次,那一個標簽在DR中會有10個引用,標簽只能獲取tag。而其他9個只能用digest獲取了。
簡單的來說就是因為相同的標簽的鏡像重復提交次數過多導致。
2、解決方法
1、編輯 common/config/registry/config.yml文件
此文件在harbor安裝目錄下,關閉的目的是為了禁止身份驗證
2、修改 docker-compose.yml 文件
此文件在harbor安裝目錄下,修改此文件的目的是把registry port端口暴露出來,添加紅框出的配置,注意格式。
3、重新配置harbor,使其配置生效
執行下面的命令
docker-compose down
docker-compose up -d
4、 清理已刪除未使用的清單
執行下面的命令
docker run --network="host" -it -v /data/registry:/registry -e REGISTRY_URL=http://127.0.0.1:5000 mortensrasmussen/docker-registry-manifest-cleanup:1.1.2beta
5、清理以刪除現在不再與清單關聯的blob
執行下面的命令
docker run -it --name gc --rm --volumes-from registry vmware/registry-photon:v2.6.2-v1.4.0 garbage-collect /etc/registry/config.yml
6、把步驟1和步驟2的配置修改回初始狀態,並重啟harbor。