2016-12-19 55 views
6

我正在運行Mac本地Docker(沒有virtualbox/docker-machine)。如何修復Docker中'設備上沒有剩餘空間'錯誤?

我有很多基礎設施(Postgres等)的巨大形象。 我已經運行清理腳本來擺脫大量的未使用的圖像等等。

當我跑我的形象,我得到這樣一個錯誤:

could not create directory "/var/lib/postgresql/data/pg_xlog": No space left on device 

在我的Mac主機的/ var正坐在60%的可用空間,一般我的硬盤有很多免費的存儲空間。

這是一些Docker配置,我需要爲它提供更多的資源嗎?從mount

相關行內泊塢窗:

none on/type aufs (rw,relatime,si=5b19fc7476f7db86,dio,dirperm1) 
/dev/vda1 on /data type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /etc/hostname type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /etc/hosts type ext4 (rw,relatime,data=ordered) 
/dev/vda1 on /var/lib/postgresql/data type ext4 (rw,relatime,data=ordered) 

這裏的df

[11:14] 
Filesystem  1K-blocks Used Available Use% Mounted on 
none   202054928 4333016 187269304 3%/
tmpfs   1022788  0 1022788 0% /dev 
tmpfs   1022788  0 1022788 0% /sys/fs/cgroup 
/dev/vda1  202054928 4333016 187269304 3% /data 
shm    65536  4  65532 1% /dev/shm 
tmpfs    204560  284 204276 1% /run/docker.sock 
+0

你看到了什麼,如果你運行'mount'和'df'爲根泊塢窗實例內部? (將其添加到問題中) - 也爲我們提供運行容器的'docker inspect'輸出的相關部分。 – slim

+0

好的,所以有趣的部分是'/ dev/vda1'掛載爲'/ var/lib/postgresql/data'(以及'/ data' )。但是它和'/'有完全相同的空閒空間,所以可能與下面的音量相同,而且在你運行'df'的時候它還遠沒有滿。我服從Docker的神。 「碼頭檢查」可能會揭露更多。 – slim

+0

默認情況下,容器會獲得10GB的空間,這可能是您正在運行的牆。目前我沒有時間進一步查看,但我相信您可以增加它,並查看https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/ –

回答

1

我在Linux上泊塢窗的安裝使用了devicemapper存儲驅動程序(默認)就遇到了這個最近上。確實有一個碼頭配置需要改變以解決這個問題。

Docker鏡像由只讀的文件系統快照層組成,每個層都由您的Dockerfile中的命令創建,這些命令構建在公共基本存儲快照之上。基礎快照由所有圖像共享,並具有默認大小爲10GB的文件系統。當你運行你的圖像時,你會在圖像的所有圖層上獲得一個新的可寫圖層,這樣你就可以在運行的容器中添加新文件,但它最終仍然基於10GB文件系統的基本快照。對於devicemapper,這至少是正確的,不確定其他驅動程序。 Here是docker的相關文檔。

要將此默認值更改爲其他值,可以設置一個守護程序參數,例如, docker daemon --storage-opt dm.basesize=100G。由於您可能不需要手動運行守護進程,因此需要在某個文件中編輯docker守護進程選項,具體取決於您如何運行docker守護進程。使用docker for mac,您可以在Daemon->Advanced下的首選項中將守護程序參數編輯爲JSON。你可能需要添加這樣的事情:

{ 
    "storage-opts": ["dm.basesize=100G"] 
} 

(但就像我說的,我對Linux這個問題,所以沒有嘗試以上)。

無論如何,爲了使其生效,您需要刪除所有現有圖像(以便在新的基本快照上重新創建新圖像)。見storage driver options

+0

請注意,這僅適用於devicemapper,而OSX不使用該方法:https://github.com/docker/for-mac/issues/2134 – pcambra

0

我還沒有發現如此多的選擇,在GitHub上的主要問題是https://github.com/docker/for-mac/issues/371

一些選項建議有:

  • 如果你可以刪除所有圖像/容器,可以請按照以下說明:

docker rm $(docker ps -a -q) docker rmi $(docker images -q) docker volume rm $(docker volume ls |awk '{print $2}') rm -rf ~/Library/Containers/com.docker.docker/Data/*

  • 你可以嘗試修剪所有未使用的圖像/箱,但實踐證明這不是很有效:

docker system prune

參見:How do you get around the size limitation of Docker.qcow2 in the Docker for Mac?https://forums.docker.com/t/no-space-left-on-device-error/10894/26

相關問題