docker的容器和映象的清理

2022-03-17 10:22:46 字數 2247 閱讀 5616

docker使用者會在使用docker一段時間後發現宿主機的磁碟很容易就快被佔滿,並且手動docker rmi [imgname]似乎並不能釋放磁碟,貌似想刪掉的映象依然在宿主機中,下面針對這一問題提出一些解決方案。

docker空間占用檢視

1.13版本後docker提供給了一些system命令,例如df命令檢視docker占用分布:

$ docker system df

type total active size reclaimable

images 3 0 5.373gb 5.373gb (100%)

containers 0 0 0b 0b

local volumes 0 0 0b 0b

$ docker system df -v 命令可以進一步檢視空間占用細節,以確定是哪個映象、容器或本地卷占用過高空間

清理方法

1 自動清理命令

docker system prune可對空間進行自動清理。

該命令所清理的物件如下:

已停止的容器

未被任何容器使用的卷

未被任何容器所關聯的網路

所有懸空的映象

對於上面提到的一些映象或容器的狀態,需要我們心裡有點數:

已使用的映象:指所有已被容器(包括stop的)關聯的映象,也就是docker ps -a所看到的所有容器對應的image。

未引用映象:沒有被分配或使用在容器中的映象

懸空映象(dangling image):未配置任何tag(也就是無法被引用)的映象。通常是由於映象編譯過程中未指定-t引數配置tag導致的。

docker system prune後可以加額外的引數,如:

docker system prune -a: 一併清除所有未被使用的映象和懸空映象。

docker system prune -f: 用以強制刪除,不提示資訊。

另外除了system級別的,還有針對容器或是映象級別的刪除命令:

docker image prune:刪除懸空的映象。

docker container prune:刪除無用的容器。

--預設情況下docker container prune命令會清理掉所有處於stopped狀態的容器

--如果不想那麼殘忍統統都刪掉,也可以使用--filter標誌來篩選出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24內建立的除外:

--$ docker container prune --filter "until=24h"

docker volume prune:刪除無用的卷。

docker network prune:刪除無用的網路

手動清除

對於懸空映象和未使用映象可以使用手動進行個別刪除:

1、刪除所有懸空映象,不刪除未使用映象:

docker rmi $(docker images -f "dangling=true" -q)

2、刪除所有未使用映象和懸空映象

docker rmi $(docker images -q)

3、清理卷

如果卷占用空間過高,可以清除一些不使用的卷,包括一些未被任何容器呼叫的卷(-v 詳細資訊中若顯示 links = 0,則是未被呼叫):

刪除所有未被容器引用的卷:

docker volume rm $(docker volume ls -qf dangling=true)

4、容器清理

如果發現是容器占用過高的空間,可以手動刪除一些:

刪除所有已退出的容器:

docker rm -v $(docker ps -aq -f status=exited)

刪除所有狀態為dead的容器

docker rm -v $(docker ps -aq -f status=dead)

docker映象清理

在docker中如果要清理映象,比如有某個映象要刪除,可以使用命令 docker rmi imageid imagename 作用 根據映象id或名稱刪除映象 在刪除映象的時候同時會將映象存放在檔案系統中的元資料和映象層都刪除,從而釋放儲存空間。但有時候如果發現本地的儲存空間不夠用了,映象造成的原因...

Docker 清理命令 刪除所有的映象和容器

docker 清理命令 刪除所有的映象和容器 參考文件 殺死所有正在執行的容器 docker kill docker ps a q 刪除所有已經停止的容器 docker rm docker ps a q 刪除所有未打 dangling 標籤的鏡 docker rmi docker images q ...

Docker 清理命令 刪除所有的映象和容器

殺死所有正在執行的容器 shell docker kill docker ps a q 1docker kill docker ps a q 刪除所有已經停止的容器 shell docker rm docker ps a q 1docker rm docker ps a q 刪除所有未打 dangl...