dockerでno space left on deviceが出た時の対処法

概要

  • no space left on deviceは、OS自体のディスク容量不足の可能性もありますが、ほとんどはDocker自体に割り当てられたディスク容量の枯渇。
  • Dockerは20GB分しか確保しない。
  • アプローチは以下の通り。自分の状況に合った方法で。

1. ゴミ掃除

下に行けば行くほど、強力なお掃除。

dangling フィルタはコンテナから参照されていない(dangling=宙ぶらりんな)ボリュームに一致します。

$ docker volume rm $(docker volume ls -qf dangling=true)

Docker 1.13からの機能
1週間以上使っていないコンテナの削除。以下の例では1週間。

$ docker container prune --force --filter "until=168h"

1週間以上使っていないコンテナの削除。

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

コンテナ削除

$ docker rm $(docker ps -aq)

イメージ削除

$ docker rmi $(docker images -q)

使われていないimageを一括削除する。これが一番効いた気がする。Total reclaimed space: 19.58GB

$ docker image prune

【危険】全ての停止中のコンテナ、ボリューム、ネットワーク、イメージを一括削除するコマンド。

$ docker system prune 

2. ディスクイメージの再構築

qemuをインストール。

$ brew install qemu
$ cd ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux
$ mv Docker.qcow2 Docker.qcow2.original
$ du -hs Docker.qcow2.original
12G     Docker.qcow2.original
$ qemu-img convert -O qcow2 Docker.qcow2.original Docker.qcow2
$ du -hs Docker.qcow2
772M    Docker.qcow2
$ rm Docker.qcow2.original

source: https://github.com/docker/for-mac/issues/371#issuecomment-242047368

私の場合、これでは19GBから18GBに減っただけでした。

% ls -l Docker.qcow2*
-rw-r--r--  1 yuki_matsukura  staff  19443286016 Mar 14 10:31 Docker.qcow2
-rw-r--r--  1 yuki_matsukura  staff  20844183552 Mar 14 10:30 Docker.qcow2.original

3. ディスクイメージの拡張

(Docker 17で変わらなかった。)

そもそも20GBしか確保してくれないのは少ないので。

% qemu-img info Docker.qcow2
image: Docker.qcow2
file format: qcow2
virtual size: 64G (68719476736 bytes)
disk size: 18G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

% qemu-img resize Docker.qcow2 +10G
Image resized.

% qemu-img info Docker.qcow2
image: Docker.qcow2
file format: qcow2
virtual size: 74G (79456894976 bytes)
disk size: 18G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

4. 設定ファイル書き換え

(Docker 17で変わらなかった。)

~/.docker/machine/machines/default/config.jsonを開いて、DiskSizeを20000から大きい値に変更。

参考資料


matsubokkuri

Please feel free to contact me via e-mail, twitter and facebook!

あわせて読みたい

コメントを残す