簡體   English   中英

跑出Docker磁盤空間

[英]Ran out of Docker disk space

我有這個Docker命令:

docker run -d mongo

這將構建並運行在docker容器中運行的mongodb服務器

但是,我收到一個錯誤:

no space left on device

我在MacOS上,並使用較新版本的Docker,它使用hyper-v而不是VirtualBox(我認為這是正確的)。

以下是來自mongo容器的確切錯誤消息:

$ docker logs efee16702c5756659d563b98d4ae0f58ecf1f1bba8a54f63443c0ae4b520ab4e
about to fork child process, waiting until server is ready for connections.
forked process: 21
2017-05-04T20:23:51.412+0000 I CONTROL  [main] ***** SERVER RESTARTED *****
2017-05-04T20:23:51.430+0000 I CONTROL  [main] ERROR: Cannot write pid file to /tmp/tmp.Lo035QkbfL: No space left on device
ERROR: child process failed, exited with error number 1

知道如何解決這個問題並防止將來發生這種情況嗎?

如建議的那樣, df -h的輸出是:

Filesystem      Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk1     465Gi  116Gi  349Gi    25% 1963838 4293003441    0%   /
devfs          183Ki  183Ki    0Bi   100%     634          0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%       0          0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0          0  100%   /home

docker info輸出是:

$ docker info
    Containers: 5
     Running: 0
     Paused: 0
     Stopped: 5
    Images: 741
    Server Version: 17.03.1-ce
    Storage Driver: overlay2
     Backing Filesystem: extfs
     Supports d_type: true
     Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins: 
     Volume: local
     Network: bridge host ipvlan macvlan null overlay
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
    runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
    init version: N/A (expected: 949e6facb77383876aeff8a6944dde66b3089574)
    Security Options:
     seccomp
      Profile: default
    Kernel Version: 4.9.13-moby
    Operating System: Alpine Linux v3.5
    OSType: linux
    Architecture: x86_64
    CPUs: 4
    Total Memory: 1.952 GiB
    Name: moby
    ID: OR4L:WYWW:FFAP:IDX3:B6UK:O2AN:UVTO:EPH6:GYSV:4GV4:L5WP:BQTH
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): true
     File Descriptors: 17
     Goroutines: 30
     System Time: 2017-05-04T20:45:27.056157913Z
     EventsListeners: 1
    No Proxy: *.local, 169.254/16
    Registry: https://index.docker.io/v1/
    Experimental: true
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false

正如您在問題的評論中所述, ls -altrh ~/Library/Containers/com.docker.docker/Data/com.docker.driver.‌​amd64-linux/Docker.q‌​cow2返回以下內容:

-rw-r--r--@ 1 alexamil staff 53G

這是MacOS上的一個已知錯誤(實際上,不僅僅是),可以在這里找到正式的開發者評論。 除了一件事:我讀到,不同的人有不同的大小限制。 在評論中它是64Gb,但對於另一個人它是20Gb。

有幾個走路,但我找不到明確的解決方案。

手冊之一

運行docker ps -a並手動刪除所有未使用的容器。 然后運行docker images並手動刪除所有中間和未使用的圖像。

最簡單的一個

完全刪除Docker.qcow2文件。 但是你會失去所有的圖像和容器。 完全。

不太簡單

另一種方法是運行docker volume prune ,它將刪除所有未使用的卷

調整大小(保留數據)

另一個想法是使用QEMU或類似的東西擴展磁盤映像大小:

$ brew install qemu
$ /Applications/Docker.app/Contents/MacOS/qemu-img resize ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 +5G

展開圖像后,您將需要運行一個VM,在該VM中,您應該針對Docker.qcow2運行GParted並展開分區以使用添加的空間。 您可以使用GParted Live ISO:

$ qemu-system-x86_64 -drive file=Docker.qcow2  -m 512 -cdrom ~/Downloads/gparted-live.iso -boot d -device usb-mouse -usb

有些人報告這不起作用或沒有幫助。

又一個調整大小(擦除數據)

創建所需大小的替代圖像(120G):

$ qemu-img create -f qcow2 ~/data.qcow2 120G
$ cp ~/data.qcow2 /Application/Docker.app/Contents/Resources/moby/data.qcow2
$ rm ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 

重新啟動~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2時, data.qcow2被復制到~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

本回顧來自此評論

希望這可以幫助。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM