1. ホーム
  2. docker

[解決済み] なぜdockerイメージはdockerが使用していない私のディスクスペースを食べるのでしょうか?

2023-01-27 18:07:20

質問

dockerをセットアップして、dockerのシステムデータを格納するために、全く別のブロックデバイスを使用しました。

[root@blink1 /]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker

other_args="-H tcp://0.0.0.0:9367 -H unix:///var/run/docker.sock -g /disk1/docker"

なお /disk/1 は全く別のハードディスクを使用しています /dev/xvdi

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.6G  67% /
devtmpfs        1.9G  108K  1.9G   1% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/xvdi        20G  5.3G   15G  27% /disk1
/dev/dm-1       9.8G  1.7G  7.6G  18% /disk1/docker/devicemapper/mnt/bb6c540bae25aaf01aedf56ff61ffed8c6ae41aa9bd06122d440c6053e3486bf
/dev/dm-2       9.8G  1.7G  7.7G  18% /disk1/docker/devicemapper/mnt/c85f756c59a5e1d260c3cdb473f3f4d9e55ac568967abe190eeaf9c4087afeac

問題は、dockerイメージのダウンロードとdockerコンテナの実行を続けていると、どうやらもう一方のハードディスクが /dev/xvda1 も使い果たしたようです。

この問題は、いくつかのdockerイメージを削除することで確認することができます。いくつかのDocker Imageを削除したところ /dev/xvda1 には、さらに余分なスペースができました。

何か見落としているのでしょうか?

私のdockerのバージョンです。

[root@blink1 /]# docker info
Containers: 2
Images: 42
Storage Driver: devicemapper
 Pool Name: docker-202:1-275421-pool
 Pool Blocksize: 64 Kb
 Data file: /disk1/docker/devicemapper/devicemapper/data
 Metadata file: /disk1/docker/devicemapper/devicemapper/metadata
 Data Space Used: 3054.4 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 4.7 Mb
 Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.14.20-20.44.amzn1.x86_64
Operating System: Amazon Linux AMI 2014.09

どのように解決するのですか?

これは devicemapper のカーネルの問題で、RedHat 系 OS (RedHat, Fedora, CentOS, Amazon Linux) に影響します。削除されたコンテナは、マップされたディスク領域を解放しません。つまり、影響を受ける OS では、コンテナを起動したり再起動したりすると、徐々にスペースが不足していきます。

Docker プロジェクトはこのことを認識しており、カーネルはアップストリームで修正されていると思われます ( https://github.com/docker/docker/issues/3182 ).

一種の回避策は、Dockerに書き込み用の独自のボリュームを与えることです ( "Dockerがディスクスペースを食いつぶしてしまう場合" ). これは実際にスペースを消費することを止めるのではなく、消費した後にシステムの他の部分をダウンさせることを止めるだけです。

私の解決策は、docker をアンインストールし、そのファイルをすべて削除し、再インストールすることでした。

sudo yum remove docker
sudo rm -rf /var/lib/docker
sudo yum install docker

これでスペースは戻りましたが、単に代替のインスタンスを起動するのと大差ありません。これ以上すっきりした解決策は見つかっていません。