2 回答

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