概要
no space left on device
は、日本語訳すると「空きディスク容量がありません」ということです。まずは、OS自体のディスク容量不足をまずはチェックします。- OSのディスク容量が空いているのに、
no space left on device
が表示された場合はDocker自体に割り当てられたディスク容量が枯渇したことが原因です。 - 例えば、Docker for Macは20GB分しか確保しないです。
- 普通にDockerを利用しているとゴミデータが溜まっていくので、不要なデータを消していきます。
- 下に行けば下に行くほど、重要なデータを消していくことになりますのでご注意ください。
0. 割当領域の拡張
macOSであれば以下のような設定画面から、割り当てているディスク容量の変更を行えます。設定を変更後はDockerの再起動が必要になります。
そもそも、自分が思っている以上にDockerがディスクを消費していると感じる場合は、以降にあるような手順でゴミファイルの削除を進めて行ってください。
1. ゴミ掃除
まずは、名前が割り振られていない仮想ディスクを削除します。
GUIから行う場合
Docker Desktopから簡単に行なえます。
danglingなコンテナはほとんど再利用することはないので消してしまっても問題はほとんど起きないと思います。
CLIから行う場合
dockerコマンドのdanglingフィルタはコンテナから参照されていない(dangling=宙ぶらりんな)ボリュームに一致します。
$ docker volume rm $(docker volume ls -qf dangling=true)
次に、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)
dangilingなimageを一括削除する。
Dangilingなimageとは、Dockerfileから作ってタグを打っていないimageです。
基本的に再利用することはないので消してOKです。普通の利用方法をしていればイメージはDockerfileから再生成できます。docker-composeから作ったり、tagが打ってあるイメージは消えません。
$ docker rmi $(docker images -f "dangling=true" -q)
次に、全イメージを削除します。imageが全部消えます。関連しているコンテナがまだ存在している場合はエラーが表示されて消えません。以下の2つのコマンドはほぼ同義です。
$ docker rmi $(docker images -q)
$ docker image prune
停止中の全コンテナを削除するコマンド
$ docker container prune
全ての停止中のコンテナ、ボリューム、ネットワーク、イメージを一括削除するコマンドです。ほぼDockerのリセットと同義です。
$ docker system prune
2. ディスクイメージの再構築
(これは、macosだけかも)
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. ディスクイメージの拡張
そもそも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から大きい値に変更。
Comments