2 回答
TA貢獻1856條經驗 獲得超5個贊
是不是有什么容器正在使用這個 mysql 鏡像?或者你是否重新docker tag過這個鏡像?或者使用其它版本的mysql鏡像?或者在使用基于 debian:jessie 的鏡像?
要知道鏡像并非單一文件,而是存儲層的集合。當你執行 docker rmi -f mysql 的時候,實際上是刪除 mysql:latest 這個tag,因此第一行一般是 Untagged: mysql:latest。
接下來的邏輯是,如果沒有其它tag指向該存儲層,則會真實刪除該存儲層,然后繼續查詢下一層的存儲層是否還有人在使用,沒有繼續刪除,直到某一層發現還有容器或者鏡像依賴該存儲層,那么就停止刪除。所以當你執行 docker rmi 的時候,可以觀察一下出現了多少個 Deleted: sha256: ...,這就是刪除了多少層,其它的并未刪除。
那么假如你重新 docker tag 了這個mysql鏡像,那么當你執行 docker rmi 的時候,只會執行 untag 的操作,而不會真的刪除存儲層。
又或者系統有其它鏡像是基于相同的基礎鏡像 debian:jessie 的,那么docker rmi 也只會刪到這一層就停止了,以后每次pull 也是從這層開始。
同樣,這種分層存儲的概念也會影響你的 docker pull。 當你執行docker pull的時候,會查看官方 docker:latest 的每一層的校驗值,然后到本地比對,看看哪些已經存在,如果存在就不重復pull,直接使用當前存儲層,如果不存在則pull新的。
拿剛才的假如你重新docker tag的例子,如果你之前重新tag過該 mysql:latest鏡像,那么docker rmi實際上沒有刪除該鏡像,而再次 docker pull mysql 的時候,發現所有存儲層本地都有,那必然不需要再次 pull,直接將最頂層tag為mysql:latest即可。這種情況無需擔心,也不必強迫重新下載,因為sha256sum可以確保鏡像文件和官網的一致性。
所以你的問題需要看具體情況是什么來說。一般來說,在生產環境不建議使用 latest 標簽,而是明確指定版本,這樣才可能升級維護。
- 2 回答
- 0 關注
- 1059 瀏覽
添加回答
舉報
