事象 : コンテナをビルドしていたら怒られてコンテナ作成に失敗した
$ docker-compose up -d --no-recreate --build
...省略...
vulkan-filesystem.noarch 0:1.1.97.0-1.el7
xdg-utils.noarch 0:1.1.0-0.17.20120809git.el7
Complete!
ERROR: Service 'ponsuke-java11' failed to build: Error processing tar file(exit status 1): write /opt/google/chrome/chrome: no space left on device
原因 : ホストのディスク容量が不足しているから
# ディスク容量の使用率が99%になっていた
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 17M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/xvda1 8.0G 7.9G 130M 99% /
tmpfs 6.3G 0 6.3G 0% /run/user/1000
# 残りのinodeを使用率は32%でまだ大丈夫だった
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 8217754 365 8217389 1% /dev
tmpfs 8223738 1 8223737 1% /dev/shm
tmpfs 8223738 547 8223191 1% /run
tmpfs 8223738 16 8223722 1% /sys/fs/cgroup
/dev/xvda1 387040 120071 266969 32% /
tmpfs 8223738 1 8223737 1% /run/user/1000
削減できる場所を探ってみる
du
コマンドでディレクトリのディスク使用量を見ると/var/lib/docker
がほとんどだった。
というわけで、削減できそうなところはない。
参考 : CentOS ディスク容量不足の原因調査&MySQLのバイナリログ自動削除設定
# 全体から見るとvarディレクトリ配下がたくさん使っている
$ sudo du -sh /*
[sudo] password for ponsuke:
...省略...
5.3G /var
# varディレクトリ配下ではlibディレクトリ配下がたくさん使っている
$ sudo du -sh /var/*
...省略...
5.1G /var/lib
...省略...
# libディレクトリ配下ではdockerディレクトリ配下がたくさん使っている
$ sudo du -sh /var/lib/*
...省略...
5.0G /var/lib/docker
...省略...
ディスク容量が小さすぎる
そもそもディスク容量8Gが小さすぎる。
- 参考
# パーティション1つ、全体でも8G・・・
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
# やっぱり、8G・・・は小さい
$ sudo fdisk -l
[sudo] password for ponsuke:
Disk /dev/xvda: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000b723c
Device Boot Start End Blocks Id System
/dev/xvda1 * 2048 16777215 8387584 83 Linux
対応方法 : EBSボリュームを増やす
1回ボリュームサイズやタイプを変更すると6時間以内は変更できなくなるので注意が必要。
If you reach the maximum volume modification rate per volume limit, you will need to wait at least six hours before applying further modifications to the affected EBS volume.
ModifyVolume - Amazon Elastic Compute Cloud
- AWSのコンソール > [EC2] > [インスタンス] > 対象のインスタンスを選択して詳細を画面下部に表示する
- [説明]タブ > [ルートデバイス]リンクからポップアップを表示する > [EBS ID]リンクからボリューム画面を表示する
- [アクション] > [ボリュームの変更] > [サイズ]に適当なディスク容量を入力 > [変更]
- デバイスのパーティションテーブルを一覧表示してディスク容量が増えたことを確認する
- ブロックデバイスの一覧を表示してディスク容量が増えたことを確認する
- 使っているパーティションのディスク容量がまだ増えていないことを確認する
- ファイルシステムを拡大する
- 使っているパーティションのディスク容量が増えたことを確認する
- 作成に失敗したコンテナある場合は、削除する
- 使っていないボリュームやイメージを削除する
- コンテナをビルドして作り直す
CentOS7の場合
- 環境 : CentOS Linux release 7.8.2003 (Core)
- 参考
8Gから16Gに変更した場合
# 4. デバイスのパーティションテーブルを一覧表示してディスク容量が増えたことを確認する
$ sudo fdisk -l
Disk /dev/xvda: 17.2 GB, 17179869184 bytes, 33554432 sectors
...省略...
# 5. ブロックデバイスの一覧を表示してディスク容量が増えたことを確認する
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 8G 0 part /
# 6. 使っているパーティションのディスク容量がまだ増えていないことを確認する
$ df -h
Filesystem Size Used Avail Use% Mounted on
...省略...
/dev/xvda1 8.0G 7.9G 130M 99% /
tmpfs 6.3G 0 6.3G 0% /run/user/1000
# 7. マウント中のXFSファイルシステムを拡大する
$ sudo xfs_growfs /dev/xvda1
meta-data=/dev/xvda1 isize=512 agcount=4, agsize=524224 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2096896, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2096896 to 4194043
# 8. 使っているパーティションのディスク容量が増えたことを確認する
$ df -h
Filesystem Size Used Avail Use% Mounted on
...省略...
/dev/xvda1 16G 7.9G 8.2G 50% /
tmpfs 6.3G 0 6.3G 0% /run/user/1000
# 9. 作成に失敗したコンテナある場合は、
$ docker ps -a -s
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
af37a1234567 d6c70722db8a "/bin/sh -c 'yum -y …" 4 hours ago Exited (0) 3 hours ago zen_blackburn 370MB (virtual 5.15GB)
# 9. 削除する
$ docker rm af37a1234567
af37a1234567
# 10. 使っていないボリュームやイメージを削除する
$ docker system prune -a -f --volumes
Deleted Networks:
...省略...
Total reclaimed space: 4.783GB
# きれいになった
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
# 11. コンテナをビルドして作り直す
$ docker-compose up -d --no-recreate --build
...省略...
Creating ponsuke-java11 ... done
Ubuntuの場合
- 環境 : Ubuntu 20.04 LTS
- 参考 : EC2 EBS ボリュームサイズ拡張のやりかた - Qiita
8Gから80Gに変更した場合
# 4. デバイスのパーティションテーブルを一覧表示してディスク容量が増えたことを確認する
$ sudo fdisk -l
...省略...
Disk /dev/xvda: 80 GiB, 85899345920 bytes, 167772160 sectors
...省略...
# 5. ブロックデバイスの一覧を表示してディスク容量が増えたことを確認する
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...省略...
xvda 202:0 0 80G 0 disk
└─xvda1 202:1 0 8G 0 part /
# 6. 使っているパーティションのディスク容量がまだ増えていないことを確認する
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.7G 7.4G 326M 96% /
...省略...
# 7. パーティションを拡張する
$ sudo growpart /dev/xvda 1
CHANGED: partition=1 start=2048 old: size=16775135 end=16777183 new: size=167770079 end=167772127
# 7. ファイルシステムを拡大する
$ sudo resize2fs /dev/xvda1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 10
The filesystem on /dev/xvda1 is now 20971259 (4k) blocks long.
# 8. 使っているパーティションのディスク容量が増えたことを確認する
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 78G 7.1G 71G 10% /
...省略...
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...省略...
xvda 202:0 0 80G 0 disk
└─xvda1 202:1 0 80G 0 part /
# 9. 作成に失敗したコンテナある場合は、
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3113ef1ce9f0 0d13f4f2d34a "/bin/sh -c 'yum -y …" 14 minutes ago Exited (1) 13 minutes ago jolly_lovelace
# 9. 削除する
$ docker rm 3113ef1ce9f0
3113ef1ce9f0
# 10. 使っていないボリュームやイメージを削除する
$ docker system prune -a -f --volumes
Deleted Networks:
...省略...
Total reclaimed space: 3.943GB
# きれいになった
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 540.6MB 0B (0%)
Containers 1 1 1.13kB 0B (0%)
Local Volumes 1 1 193.7MB 0B (0%)
Build Cache 0 0 0B 0B
# 11. コンテナをビルドして作り直す
$ docker-compose up -d --no-recreate --build