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 關注
- 1046 瀏覽
添加回答
舉報