Docker/OSX 找不到「裝置上沒有空間」的原因

Docker/OSX 找不到「裝置上沒有空間」的原因

環境版本:

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作為估計容器磁碟使用統計資訊的建議方法,但沒有成功。所有這些都不是實際值。所以看來我使用這些工具的方式是錯誤的,我以一種磨損的方式解釋數字。

從母主機統計來看:

  1. docker inspect給出https://pastebin.com/53vLji1p

  2. docker 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)
<...>
  1. 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”

所以問題是:

  1. 我怎麼能看到真實的容器使用統計數據,以便我可以進行一些調整。

  2. 最大容器磁碟大小的配置放在哪裡?

謝謝你!

更新

我嘗試重新啟動 docker 應用程序,但一切都以致命的空間錯誤結束 -https://pastebin.com/twM3qN8N

所以 docker 目前根本沒有啟動。好吧...我還發現了一些與 gh 上的問題非常相似的東西 -https://github.com/docker/for-mac/issues/3529

我之前看到過有關行為不當的問題,其中刪除 qcow2 檔案是一個解決方案,但總是存在空間問題,其中usedconfigured大小接近,問題在於調整大小。但似乎這個問題與我的問題類似,因為問題作者 qcow2 檔案大小似乎足夠大。

我看到臨時解決方法可以清除所有數據,但希望在我徹底清除之前找到替代方案,或者至少找到有關磁碟使用指標的某種解釋。

更新2

沒有 qcow 的部分決定 清楚但不理解

繼續閱讀各種if文章和閱讀後http://phutchins.com/blog/2017/01/04/fixing-docker-no-space-left-on-device/

並注意到奇怪的 20Gb 限制,預設為 2017 年。讓我們想像一下,儘管df -h內部容器和docker desktopui 設定報告大約 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 首選項調整此虛擬機器的設定:

適用於 MacOS 的 Docker 磁碟首選項

圖片來源:docker 文檔

更多詳細資訊可從以下網址取得:https://docs.docker.com/docker-for-mac/space/


關於磁碟使用的一個重要注意事項是,您可能會耗盡磁碟字節,也可能會耗盡索引節點。兩者都會給出相同的錯誤。使用該df -i選項檢查 indoes,例如:

df -h # to see disk free
df -hi # to see inodes free

如果在容器執行時發生錯誤,然後容器被刪除,則刪除容器可能會釋放該磁碟空間。

相關內容