overlay2占用磁盤空間-overlay空間不足
overlay2占用磁盤空間
Overlay2 是 Docker 默認(rèn)的存儲(chǔ)驅(qū)動(dòng),用于管理容器的鏡像和文件系統(tǒng)。Overlay2 占用磁盤空間的相關(guān)情況如下:

占用空間大的原因
- 容器鏡像層疊加:每個(gè)容器都有自己的鏡像層,其可寫層會(huì)保存容器所做的所有更改。當(dāng)多個(gè)容器使用相同的只讀鏡像層時(shí),每個(gè)容器的可寫層都會(huì)保存一份相同文件的副本,導(dǎo)致空間占用增加。
- 鏡像更新和刪除:當(dāng)容器鏡像被更新或刪除時(shí),Overlay2 會(huì)保留舊的鏡像層并創(chuàng)建新的鏡像層以保證容器的可回滾性,這會(huì)導(dǎo)致存儲(chǔ)占用增加。
- 大量的鏡像和容器層累積:每次運(yùn)行 Docker 容器都會(huì)從鏡像中創(chuàng)建新的寫層,存儲(chǔ)容器運(yùn)行時(shí)的文件修改。大量運(yùn)行或停止未刪除的容器會(huì)使 Overlay2 目錄中的層大量累積,占用大量空間。
- 容器內(nèi)文件增多:容器內(nèi)的寫操作如應(yīng)用日志、臨時(shí)文件等都會(huì)寫入 Overlay2 的 diff 層。若容器產(chǎn)生大量文件,會(huì)導(dǎo)致存儲(chǔ)層膨脹。
- 未清理的緩存和未使用的鏡像層:Docker 在構(gòu)建鏡像或運(yùn)行容器時(shí)會(huì)生成大量緩存數(shù)據(jù),在 Overlay2 中存儲(chǔ),若不清理會(huì)長(zhǎng)期累積占用大量磁盤空間。
查看占用空間的方法
可使用命令
du -h /var/lib/docker/overlay2查看 overlay2 卷中每個(gè) Docker 鏡像和容器占用的磁盤空間。減少占用空間的方法
- 清理無(wú)用的鏡像和容器:可使用
docker image prune命令刪除沒有被任何容器使用的鏡像,使用docker container prune命令清理不再使用的容器,還可使用docker system prune -a命令刪除所有未使用的資源,包括容器、鏡像、數(shù)據(jù)卷、網(wǎng)絡(luò)和構(gòu)建緩存。 - 清理容器日志:如果是使用中的容器占用空間,需要清理 Docker 容器的日志。先通過
docker inspect {容器名}查看容器日志目錄,然后進(jìn)入日志目錄,刪除以-json.log結(jié)尾的文件。 - 限制容器寫層大小:可在 Docker 配置文件
/etc/docker/daemon.json中通過storage-opts配置來限制每個(gè)容器的寫層大小,如{"storage-opts": ["overlay2.override_kernel_check=true", "overlay2.size=10G"]}會(huì)為每個(gè)容器的寫層分配 10GB 的空間。
