無法刪除的Container STATUS - Removal In Progress

無法刪除的 Container STATUS - Removal In Progress

同事回報,在執行重新部署後,Container 出現一個未見過的狀態:Removal In Progress,會造成後續持續部署失敗:

案例1:

Removal In Progress

案例2:

Removal In Progress 2

此 Container 會一直保持在此Removal In Progress,查詢到在 github 的回報中,有個案例回報長達12 weeks之久還在「刪除中...」的案例。先說,回報中的解法有效。

但我比較好奇的是,是何原因造成無法刪除,進行刪除 docker rm 指令:

docker rm message

訊息說明還算清楚,有個 .log 檔案被某個程序給咬住了。

lock file
un-lock files

下圖是正常的分層資料的資料夾,上圖是最後一個 .log 檔案被 Lock 造成無法刪除,而形成教科書沒教的 Removal In Progress 狀態。原本在 Server Core 想用 PowerShell 來找 lock file 的應用程式,後來發現有個 Server 內建指令 openfiles /query 能查詢,不過我查了是一片空白。突然想起了一位好久不見的朋友 Process Explorer,迅速抓出犯人:

Process Explorer - Find Handle or DLL

把被 lock 的檔案名稱貼上去,噹噹,犯人是:dockerd.exe

Process Explorer - Find Handle or DLL

你可以手動在 File 進行 Close Handle 的動作。Docker Host 處於 Swarm Mode,為了萬一,還是乖乖進行 Swarm drain 與 dockerd.exe 服務停用、刪除(.log 檔案)、重新啟動的流程。啟動後原本 Removal In Progress 狀態的 Container 會自動不見。

.log 檔案被 dockerd.exe lock 的原因不明,處理的方式也不高明,未有更好解決前,似乎也只能這樣處理。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。