
環境版本:
macos 10.14.4
docker server 18.09.2
docker desktop Version 2.0.0.3 (31259)
面對no space left on device
容器內部的錯誤,無法確定溢出來自哪裡。
最糟糕的是我無法從母主機系統的角度確定實際容器大小(info/inpsect/system df 工具),事實上 docker 和母主機的統計數據不相等:/
我有一個容器,裡面有以下 df 統計資料:
root@31a71014ad95:/usr/local/app# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 63G 21G 40G 34% /
tmpfs 64M 0 64M 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
osxfs 234G 182G 48G 80% /shared_from_host
/dev/sda1 63G 21G 40G 34% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 2.0G 0 2.0G 0% /proc/acpi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
( shared_from_host
- 是與母主機互動的共享磁碟區)
應該要提到的是,我讀過有關 Macos 上的一般圖像文件大小的信息,它看起來不錯,並且與默認的 64Gb 大小相去甚遠:
ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r--@ 1 coin staff 21G May 26 22:25 /Users/usss/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Docker 容器肯定包含一個大子目錄:
root@31a71014ad95:/usr/local/app# du -hs ./*|grep CRISP
12G ./CRISPRCasFinder
我看到ps -s
, inspect
,system df
作為估計容器磁碟使用統計資訊的建議方法,但沒有成功。所有這些都不是實際值。所以看來我使用這些工具的方式是錯誤的,我以一種磨損的方式解釋數字。
從母主機統計來看:
docker inspect
給出https://pastebin.com/53vLji1pdocker ps -s
給出
%docker container ps -sa
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
31a71014ad95 nvm:nvm_tag "/bin/bash" 6 hours ago Exited (137) 23 minutes ago cr 3.52GB (virtual 5.44GB)
<...>
docker system df
給出
%docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 8 6 5.52GB 3.021GB (54%)
Containers 6 0 3.541GB 3.541GB (100%)
Local Volumes 33 6 2.751GB 2.381GB (86%)
Build Cache 0 0 0B 0B
這些值看起來都不像 du 的容器使用情況(如上圖)。這些價值觀是我該尋找的東西嗎?
我發現的最有用和最詳細的例子是https://www.projectatomic.io/blog/2016/03/daemon_option_basedevicesize/
但是,在我目前的 docker 版本輸出中,似乎不再包含作者用於插圖的欄位 - 沒有“基本設備大小”,沒有“DeviceSize”
所以問題是:
我怎麼能看到真實的容器使用統計數據,以便我可以進行一些調整。
最大容器磁碟大小的配置放在哪裡?
謝謝你!
更新
我嘗試重新啟動 docker 應用程序,但一切都以致命的空間錯誤結束 -https://pastebin.com/twM3qN8N
所以 docker 目前根本沒有啟動。好吧...我還發現了一些與 gh 上的問題非常相似的東西 -https://github.com/docker/for-mac/issues/3529
我之前看到過有關行為不當的問題,其中刪除 qcow2 檔案是一個解決方案,但總是存在空間問題,其中used
和configured
大小接近,問題在於調整大小。但似乎這個問題與我的問題類似,因為問題作者 qcow2 檔案大小似乎足夠大。
我看到臨時解決方法可以清除所有數據,但希望在我徹底清除之前找到替代方案,或者至少找到有關磁碟使用指標的某種解釋。
更新2
沒有 qcow 的部分決定 清楚但不理解
繼續閱讀各種if文章和閱讀後http://phutchins.com/blog/2017/01/04/fixing-docker-no-space-left-on-device/
並注意到奇怪的 20Gb 限制,預設為 2017 年。讓我們想像一下,儘管df -h
內部容器和docker desktop
ui 設定報告大約 64Gb,但我仍然有 20Gb 的限制。看起來可能嗎?
並安裝了 qemu 並向鏡像中添加了 +5Gb,如文章中所述:
%qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +5G
瞧,一切都開始並有效了。我仍然看到 qemu 檔案大小相同:
%ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
-rw-r--r--@ 1 usss staff 21G May 27 00:46 /Users/usss/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
但從容器的角度來看,用法發生了一些變化
root@31a71014ad95:/usr/local/app# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 68G 21G 45G 32% /
tmpfs 64M 0 64M 0% /dev
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
osxfs 234G 178G 55G 77% /shared_from_host
/dev/sda1 68G 21G 45G 32% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 2.0G 0 2.0G 0% /proc/acpi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
現在它顯示可用 45Gb(上面有 40Gb)。
但至少現在一切正常,但絕對不知道shadowed
消費藏在哪裡。
答案1
桌面版本 docker 的磁碟空間可能會受到為嵌入式 docker VM 提供的磁碟的限制。該VM 內部包含映像、容器、命名磁碟區以及未從外部來源(例如MacOS 上的/Users 目錄)明確安裝到VM 中的任何其他檔案。您可以從 docker 首選項調整此虛擬機器的設定:
更多詳細資訊可從以下網址取得:https://docs.docker.com/docker-for-mac/space/
關於磁碟使用的一個重要注意事項是,您可能會耗盡磁碟字節,也可能會耗盡索引節點。兩者都會給出相同的錯誤。使用該df -i
選項檢查 indoes,例如:
df -h # to see disk free
df -hi # to see inodes free
如果在容器執行時發生錯誤,然後容器被刪除,則刪除容器可能會釋放該磁碟空間。