我在 Linux 機器上運行了一些 docker 容器,/docker/overlay2 資料夾的磁碟大小增長得非常快。因此我們無法推送新映像
當我檢查overlay2內部時,我發現它包含非常舊的圖層(2019年8月)
我嘗試使用以下命令來清理 docker 磁碟區 ls -qf dangling=true | xargs -r docker volume rm docker rm -v $(sudo docker ps -a -q -f status=exited) docker 系統修剪
但回收了0B
還檢查了https://stackoverflow.com/questions/46672001/is-it-safe-to-clean-docker-overlay2
https://docs.docker.com/config/pruning/
https://success.docker.com/article/error-message-no-space-left-on-device-in-default-machine
清潔這個的最好方法是什麼?
碼頭工人日誌
Starting Oracle Net Listener.
啟動 Oracle Database 11g Express Edition 實例。
等待資料庫啟動
SQL*Plus:2020 年 7 月 14 日星期二 05:04:23 發布 11.2.0.2.0 生產版
版權所有 (c) 1982、2011,Oracle。版權所有。
連接到:Oracle Database 11g Express Edition 版本 11.2.0.2.0 - 64 位元生產
SQL> 與Oracle Database 11g Express Edition 版本11.2.0.2.0 斷開連接- 64 位元生產資料庫已啟動/opt/ion/platform/daemon/DM_DOCKER / 從/opt/ion/platform/daemon/DM_DOCKER/mkvd118p1.lx啟動守護程序正在等待連接埠13000 bash: 連線: 網路無法存取bash: /dev/tcp/localhost/13000: 網路無法存取守護程式在連接埠13000 上啟動/ 正在執行: /startup/ansible_container_startup.sh 正在執行: /startup /cups_startup.sh 正在執行: /startup/ samba_startup.sh 執行:/startup/start_check_mk_agent.sh
碼頭工人差異 來自守護程式的錯誤回應: mkdir /docker/overlay2/f033daa6d065ff85484b54fcd9a7786f839917d180129ea8fed0f627ad776095-init/merged:裝置上沒有剩餘空間
答案1
當overlay2太大時,大多數人的典型答案是運行清理,修剪停止的容器和未標記的圖像(用新的標記替換)。這已經完成,docker prune
並且該命令還有其他選項可以修剪更多資料。有關一般清理此資料夾的更多詳細信息,請參閱“清理 docker/overlay2/ 是否安全」。
如果問題是/var/lib/docker/containers
資料夾不斷增長,我會懷疑寫入 stdout/stderr 的日誌,並且有各種方法來清理它並防止將來出現過多的日誌。
但是,對於此問題,如果在啟動容器時,overlay2 資料夾的大小迅速增加,則該容器很可能正在寫入與該容器關聯的讀取/寫入檔案系統。對文件的每次修改都會觸發對容器特定層的寫入時複製。您可以docker container diff
根據特定容器 ID診斷正在建立或修改哪些檔案。在您的情況下,似乎發生的速度足以填滿您的驅動器,因此您的計算機可能沒有能力調試或運行此容器,因此您可能被迫在容量更大的計算機上進行調試。
答案2
您可以使用docker image prune -a
刪除無用的影像。