(備忘)Dify Update「no space left on device」エラー

経緯

Difyのアップデート(0.8.3 -> 0.9.1)を実施後、docker compose up -d にて起動中に「no space left on device」(デバイスに空き領域がありません)というエラーが発生。

failed to register layer: write /app/api/.venv/lib/python3.10/site-packages/readabilipy/javascript/node_modules/lodash/fp/wrapperLodash.js: no space left on device

記事の目的

「やったこと」と「結果」の共有であり、「解決手段」の提供ではありません。実施においては個人の責任と判断でお願いいたします。

情報収集

まず以下サイトを参考にさせていただきました。

参考情報

この情報から、同メッセージには以下の2パターンがあることがわかります。

  1. ディスク容量の不足

  2. i nodeの枯渇

Felo@OpenAI o1-previewに聞いてみた

Dockerでコンテナが「no space left on device」というエラーで起動できない場合、主な原因とその対策をまとめてください

質問

~ここから Felo@Open AI o1-preview の回答~ 
※回答には判断が必要なものもあるのでそのまま実行しないでください。

Dockerでコンテナが「no space left on device」というエラーで起動できない場合、主な原因とその対策を以下にまとめます。

主な原因

  1. ホストマシンのディスク容量不足

    • ホストマシンのディスクがいっぱいになっているため、新しいコンテナやイメージを作成できない。

  2. Dockerのストレージドライバの制限

    • 使用しているストレージドライバ(例:overlay2、aufsなど)が特定の制限に達している。

  3. 未使用のイメージやコンテナの蓄積

    • 不要なイメージや停止中のコンテナが多く残っているため、ディスクスペースを圧迫している。

  4. ボリュームの蓄積

    • Dockerボリュームが大量に作成されているため、ディスクスペースを消費している。

  5. ログファイルの肥大化

    • コンテナのログファイルが大きくなりすぎて、ディスクスペースを圧迫している。

  6. 一時ファイルの蓄積

    • Dockerが使用する一時ファイルやキャッシュが蓄積されているため、ディスクスペースを消費している。

解決策

  1. ディスク使用状況の確認

    • `df -h` コマンドでディスクの使用状況を確認します。

  2. 不要なイメージやコンテナの削除

    • 未使用のイメージを削除: `docker image prune`

    • 未使用のコンテナを削除: `docker container prune`

    • 未使用のネットワークを削除: `docker network prune`

    • 未使用のボリュームを削除: `docker volume prune`

    • すべての未使用リソースを一括削除: `docker system prune`

  3. ボリュームの確認と削除

    • ボリュームのリストを表示: `docker volume ls`

    • 不要なボリュームを削除: `docker volume rm <volume_name>`

  4. ログの管理

    • コンテナのログ設定を見直し、必要に応じてログのローテーションを設定します。

    • ログファイルのサイズを制限するために、`docker-compose.yml` で `logging` オプションを設定します。

  5. ストレージの拡張

    • 必要に応じて、ホストマシンのディスク容量を増やします。

  6. 一時ファイルの削除

    • Dockerの一時ファイルやキャッシュを削除します。

    • Dockerのキャッシュをクリア: `docker builder prune`

これらの手順を実施することで、「no space left on device」エラーを解消できる可能性があります。

~ Felo の回答 以上 ~

対処

ディスクの利用状況確認

今回 i node は問題なく、/dev/vda1( / )で容量を圧迫(98% Used)していることがわかります。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           391M  2.1M  389M   1% /run
efivarfs        256K   89K  163K  36% /sys/firmware/efi/efivars
/dev/vda1        96G   94G  2.9G  98% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda16      881M  112M  707M  14% /boot
/dev/vda15      105M  6.1M   99M   6% /boot/efi
tmpfs           391M   16K  391M   1% /run/user/0
$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
tmpfs            500401    1080   499321    1% /run
efivarfs              0       0        0     - /sys/firmware/efi/efivars
/dev/vda1      12976128 2355405 10620723   19% /
tmpfs            500401       1   500400    1% /dev/shm
tmpfs            500401       3   500398    1% /run/lock
/dev/vda16        58496     604    57892    2% /boot
/dev/vda15            0       0        0     - /boot/efi
tmpfs            100080      35   100045    1% /run/user/0

Dockerイメージ確認

古いバージョンからTagなしのものまでいっぱいあります。

$ docker image ls
REPOSITORY                          TAG           IMAGE ID       CREATED         SIZE
langgenius/dify-web                 0.9.1         xxxxxxxxxxxx   4 days ago      236MB
langgenius/dify-web                 0.8.3         xxxxxxxxxxxx   2 weeks ago     235MB
langgenius/dify-api                 0.8.3         xxxxxxxxxxxx   2 weeks ago     2.68GB
langgenius/dify-sandbox             0.2.9         xxxxxxxxxxxx   3 weeks ago     608MB
langgenius/dify-web                 0.8.2         xxxxxxxxxxxx   3 weeks ago     234MB
langgenius/dify-api                 0.8.2         xxxxxxxxxxxx   3 weeks ago     2.68GB
langgenius/dify-web                 0.7.3         xxxxxxxxxxxx   4 weeks ago     234MB
langgenius/dify-api                 0.7.3         xxxxxxxxxxxx   4 weeks ago     2.49GB
langgenius/dify-web                 0.7.1         xxxxxxxxxxxx   6 weeks ago     233MB
langgenius/dify-api                 0.7.1         xxxxxxxxxxxx   6 weeks ago     2.34GB
langgenius/dify-sandbox             0.2.6         xxxxxxxxxxxx   6 weeks ago     513MB
langgenius/dify-api                 0.7.0         xxxxxxxxxxxx   7 weeks ago     2.34GB
langgenius/dify-web                 0.7.0         xxxxxxxxxxxx   7 weeks ago     233MB
langgenius/dify-api                 0.6.16        xxxxxxxxxxxx   8 weeks ago     2.28GB
langgenius/dify-web                 0.6.16        xxxxxxxxxxxx   8 weeks ago     232MB
langgenius/dify-web                 0.6.15        xxxxxxxxxxxx   2 months ago    232MB
langgenius/dify-api                 0.6.15        xxxxxxxxxxxx   2 months ago    2.3GB
myapp-streamlit                     latest        xxxxxxxxxxxx   2 months ago    590MB
langgenius/dify-web                 0.6.13        xxxxxxxxxxxx   2 months ago    230MB
langgenius/dify-api                 0.6.13        xxxxxxxxxxxx   2 months ago    2.26GB
firecrawl-worker                    latest        xxxxxxxxxxxx   3 months ago    1.63GB
firecrawl-api                       latest        xxxxxxxxxxxx   3 months ago    1.63GB
firecrawl-playwright-service        latest        xxxxxxxxxxxx   3 months ago    1.29GB
langgenius/dify-web                 0.6.12-fix1   xxxxxxxxxxxx   3 months ago    230MB
langgenius/dify-api                 0.6.12-fix1   xxxxxxxxxxxx   3 months ago    2.48GB
langgenius/dify-web                 0.6.12        xxxxxxxxxxxx   3 months ago    230MB
langgenius/dify-api                 0.6.12        xxxxxxxxxxxx   3 months ago    2.48GB
traefik                             latest        xxxxxxxxxxxx   3 months ago    172MB
nginx                               alpine        xxxxxxxxxxxx   3 months ago    43.2MB
langgenius/dify-web                 0.6.11        xxxxxxxxxxxx   3 months ago    231MB
langgenius/dify-api                 0.6.11        xxxxxxxxxxxx   3 months ago    2.62GB
n8nio/n8n                           latest        xxxxxxxxxxxx   3 months ago    593MB
certbot/certbot                     latest        xxxxxxxxxxxx   4 months ago    117MB
langgenius/dify-web                 0.6.10        xxxxxxxxxxxx   4 months ago    231MB
langgenius/dify-api                 0.6.10        xxxxxxxxxxxx   4 months ago    2.59GB
app-web                             latest        xxxxxxxxxxxx   4 months ago    6.66GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.44GB
langgenius/dify-sandbox             0.2.1         xxxxxxxxxxxx   4 months ago    409MB
<none>                              <none>        xxxxxxxxxxxx   4 months ago    6.29GB
langgenius/dify-api                 0.6.9         xxxxxxxxxxxx   4 months ago    1.91GB
langgenius/dify-web                 0.6.9         xxxxxxxxxxxx   4 months ago    231MB
redis                               alpine        xxxxxxxxxxxx   4 months ago    40.7MB
langgenius/dify-sandbox             0.2.0         xxxxxxxxxxxx   4 months ago    409MB
postgres                            15-alpine     xxxxxxxxxxxx   4 months ago    246MB
langgenius/dify-web                 latest        xxxxxxxxxxxx   4 months ago    229MB
langgenius/dify-api                 latest        xxxxxxxxxxxx   4 months ago    1.83GB
nginx                               latest        xxxxxxxxxxxx   5 months ago    188MB
~<略>~

古いイメージの確認と削除

確認方法

使用されていないイメージを確認するには、以下のコマンドを使用します:docker images -f "dangling=true"
このコマンドは、タグが付いていない「ぶら下がり(dangling)」イメージを表示します。これらのイメージは、通常、古いビルドの残骸であり、現在のコンテナでは使用されていません

Felo.io

Dockerの未使用リソースをまとめて削除も出来ますが、まずはimageから

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:7c60e7098499cd0ca3461d1e089cd39659eb3709bceafd85e46cc927db237d5e
deleted: sha256:9672f851928faed80791511d958f3c10fe021ac631405d0cd863a4d9f7b57794
deleted: sha256:e5b52fd05a9810c766ad361eb976cdf538feef478f6e5b52180ff74f514dc221
deleted: sha256:af2c0a7a7d36e444dbe94fe20cb99d27316987aa52a28570ae5b89a790f6b3fe
deleted: sha256:dc9d50dd4a336cf729da23ee6c35d50f070bd5b5a1b22ccc8f255a09270a36c3
deleted: sha256:3fe18313cc3cb982bfe9824631bd6a7d162d20aea20eaca703fecde29a2ec04b
deleted: sha256:298a0531e9f568dbcdfafe6f616d93774a140807c45055511095fdd9e3eb267b
deleted: sha256:3af49aa7279c239e4514e71bcf4732ef542e314e07e29bc03fc703fa17d1634c

Total reclaimed space: 0B
$

タグなしのイメージが削除されました。

$ docker image ls
REPOSITORY                          TAG           IMAGE ID       CREATED         SIZE
langgenius/dify-web                 0.9.1         xxxxxxxxxxxx   4 days ago      236MB
langgenius/dify-web                 0.8.3         xxxxxxxxxxxx   2 weeks ago     235MB
langgenius/dify-api                 0.8.3         xxxxxxxxxxxx   2 weeks ago     2.68GB
langgenius/dify-sandbox             0.2.9         xxxxxxxxxxxx   3 weeks ago     608MB
langgenius/dify-web                 0.8.2         xxxxxxxxxxxx   3 weeks ago     234MB
langgenius/dify-api                 0.8.2         xxxxxxxxxxxx   3 weeks ago     2.68GB
langgenius/dify-web                 0.7.3         xxxxxxxxxxxx   4 weeks ago     234MB
langgenius/dify-api                 0.7.3         xxxxxxxxxxxx   4 weeks ago     2.49GB
langgenius/dify-web                 0.7.1         xxxxxxxxxxxx   6 weeks ago     233MB
langgenius/dify-api                 0.7.1         xxxxxxxxxxxx   6 weeks ago     2.34GB
langgenius/dify-sandbox             0.2.6         xxxxxxxxxxxx   6 weeks ago     513MB
langgenius/dify-api                 0.7.0         xxxxxxxxxxxx   7 weeks ago     2.34GB
langgenius/dify-web                 0.7.0         xxxxxxxxxxxx   7 weeks ago     233MB
langgenius/dify-api                 0.6.16        xxxxxxxxxxxx   8 weeks ago     2.28GB
langgenius/dify-web                 0.6.16        xxxxxxxxxxxx   8 weeks ago     232MB
langgenius/dify-web                 0.6.15        xxxxxxxxxxxx   2 months ago    232MB
langgenius/dify-api                 0.6.15        xxxxxxxxxxxx   2 months ago    2.3GB
myapp-streamlit                     latest        xxxxxxxxxxxx   2 months ago    590MB
langgenius/dify-web                 0.6.13        xxxxxxxxxxxx   2 months ago    230MB
langgenius/dify-api                 0.6.13        xxxxxxxxxxxx   2 months ago    2.26GB
firecrawl-api                       latest        xxxxxxxxxxxx   3 months ago    1.63GB
firecrawl-worker                    latest        xxxxxxxxxxxx   3 months ago    1.63GB
firecrawl-playwright-service        latest        xxxxxxxxxxxx   3 months ago    1.29GB
langgenius/dify-web                 0.6.12-fix1   xxxxxxxxxxxx   3 months ago    230MB
langgenius/dify-api                 0.6.12-fix1   xxxxxxxxxxxx   3 months ago    2.48GB
langgenius/dify-web                 0.6.12        xxxxxxxxxxxx   3 months ago    230MB
langgenius/dify-api                 0.6.12        xxxxxxxxxxxx   3 months ago    2.48GB
traefik                             latest        xxxxxxxxxxxx   3 months ago    172MB
nginx                               alpine        xxxxxxxxxxxx   3 months ago    43.2MB
langgenius/dify-web                 0.6.11        xxxxxxxxxxxx   3 months ago    231MB
langgenius/dify-api                 0.6.11        xxxxxxxxxxxx   3 months ago    2.62GB
n8nio/n8n                           latest        xxxxxxxxxxxx   3 months ago    593MB
certbot/certbot                     latest        xxxxxxxxxxxx   4 months ago    117MB
langgenius/dify-web                 0.6.10        xxxxxxxxxxxx   4 months ago    231MB
langgenius/dify-api                 0.6.10        xxxxxxxxxxxx   4 months ago    2.59GB
app-web                             latest        xxxxxxxxxxxx   4 months ago    6.66GB
langgenius/dify-sandbox             0.2.1         xxxxxxxxxxxx   4 months ago    409MB
langgenius/dify-api                 0.6.9         xxxxxxxxxxxx   4 months ago    1.91GB
langgenius/dify-web                 0.6.9         xxxxxxxxxxxx   4 months ago    231MB
redis                               alpine        xxxxxxxxxxxx   4 months ago    40.7MB
langgenius/dify-sandbox             0.2.0         xxxxxxxxxxxx   4 months ago    409MB
postgres                            15-alpine     xxxxxxxxxxxx   4 months ago    246MB
langgenius/dify-web                 latest        xxxxxxxxxxxx   4 months ago    229MB
langgenius/dify-api                 latest        xxxxxxxxxxxx   4 months ago    1.83GB
nginx                               latest        xxxxxxxxxxxx   5 months ago    188MB
~<略>~

タグ無しで 6.4G のものがたくさんあったので、大分容量減るのかな?と思いましたが、ディスクの空き容量が 2.9G -> 3.1Gになった程度。
ここでいったん起動してみましたが事象変わらず。

その他の未使用Dockerリソース削除

見る限りコンテナとボリュームは大して容量を使ってないので、気休めにしかならなそうですが、同様に未使用分の削除

補足:
さくっとやったあとに「volumeの未使用ってどう判断してるんだろう?」と思いましたが、問題なくコンテナを起動出来たので結果オーライ。
どうも「docker system prune」 で消す時 volume は削除されないみたいです(オプション指定が必要)
※「docker system prune」 で消す(volumeは消さない)が無難そう

実施前:

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          52        13        45.62GB   40.27GB (88%)
Containers      14        12        86.79MB   853.6kB (0%)
Local Volumes   408       3         2.538MB   1.871MB (73%)
Build Cache     60        0         33.89GB   33.89GB
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
9f7c25611f79cddbc791ce18bbf9850fe754db6ea6f407e3c8d7d8fae8d2a08b
d8fef2de753765f913d28c5330e71d05278bf604f4aba03149e6c461df5cfecd

Total reclaimed space: 853.6kB
$ docker volume prune
WARNING! This will remove anonymous local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:

~<略>~

Total reclaimed space: 1.874MB
$ docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
$ 

やはり対してかわらず。。。

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          52        11        45.62GB   40.55GB (88%)
Containers      12        12        85.93MB   0B (0%)
Local Volumes   3         1         664.5kB   0B (0%)
Build Cache     60        0         33.89GB   33.89GB

この時点でも起動できなかったので、「/」にマウントしている 「/home」配下(Difyをインストールしている場所)のごみファイルを1つずつ消して、3.7Gまで増やし。。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           391M  2.1M  389M   1% /run
efivarfs        256K   89K  163K  36% /sys/firmware/efi/efivars
/dev/vda1        96G   93G  3.7G  97% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda16      881M  112M  707M  14% /boot
/dev/vda15      105M  6.1M   99M   6% /boot/efi
tmpfs           391M   16K  391M   1% /run/user/0
$

無事 v0.9.1 が起動できました。

Catchの削除

ただ、起動後に再度確認すると、「/dev/vda1」がなんとUsed 100%!

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          53        11        48.3GB    43.23GB (89%)
Containers      12        12        85.93MB   0B (0%)
Local Volumes   5         1         668kB     3.557kB (0%)
Build Cache     60        0         33.89GB   33.89GB
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           391M  2.1M  389M   1% /run
efivarfs        256K   89K  163K  36% /sys/firmware/efi/efivars
/dev/vda1        96G   95G  957M 100% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda16      881M  112M  707M  14% /boot
/dev/vda15      105M  6.1M   99M   6% /boot/efi
tmpfs           391M   16K  391M   1% /run/user/0

この状態でとりあえずは再起動も出来るが、このままではまずい。。
ここで「build cache」の削除もあることに気づく。

Dockerにおけるbuild cache(ビルドキャッシュ)とは、Dockerイメージをビルドする際に各ステップの結果をキャッシュとして保存し、再利用する仕組みのことです。これにより、同じステップを再度実行する必要がなくなり、ビルド時間を大幅に短縮することができます。

Felo.io

消しても問題なさそうなので、試しにやってみる。

$ docker builder prune
WARNING! This will remove all dangling build cache. Are you sure you want to continue? [y/N] y
ID                                              RECLAIMABLE     SIZE            LAST ACCESSED
whszw93znu06lxyyd6fhtzzx1*                      true            435.1MB         3 hours ago
06gmid40b54kncivoesloi0q8*                      true    1.546MB         3 months ago
hwu0fth5q97fuw6x72zn1b9ed*                      true    986MB           3 months ago
x7mi8284ivl0oplj3zetprqro                       true    7.189kB         4 months ago
6o4rr2z8z7sdjputdwmwwsmfm                       true    6.306GB         4 months ago
5alv4gbsimh2f2zfv4hi66xwk*                      true    0B              2 months ago
f1kct7edb97e0zo5vrbt9ljcd                       true    6.306GB         4 months ago
q2469s6o4zt1fioxw9a02aryy*                      true    6.404kB         2 months ago
m0veua6ii6jsvo9unp4ov4w9k                       true    6.306GB         4 months ago
u91hjk17ct4pk5kv61gaxyg7e                       true    6.306GB         4 months ago
3hviiyyv1q9q2dcr67k1x559y                       true    36.54MB         20 seconds ago
u9og0wy8usl58uarygq3zvtem                       true    6.166GB         21 seconds ago
kpcabrfly4qp0iwewcavk6wq2                       true    7.285kB         17 seconds ago
wtch2266x7ipxzqhengm9x4nm*                      true    149B            2 months ago
ki2x16f1ck2gaw18hynhzpjac                       true    8.019kB         8 seconds ago
ovyneshkoelmwwr23f4l81grv                       true    7.305kB         12 seconds ago
toswj5y5hue8p6iy4te2gg66e                       true    7.287kB         4 seconds ago
6bu8nqxcp17zo8q052sy81qzh                       true    75B             Less than a second ago
dumdekpqe5ri4fza6f82fosue                       true    1.044GB         8 seconds ago
k8aqgf99q7yc2jr3rene45n51                       true    0B              4 seconds ago
lukx4kuy9mlnx3c2d4w754108                       true    0B              Less than a second ago
w3fdprk7tbib2dhumbgtiaeli                       true    0B              Less than a second ago
pf8qh1cy4z8s6h59zmq8w5vtg                       true    0B              Less than a second ago
otal:  33.89GB

おおっ!95G -> 63G(Used 100% -> 66%)に一気に減った!

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          53        16        48.3GB    39.69GB (82%)
Containers      21        21        304.7MB   0B (0%)
Local Volumes   9         3         674kB     6.555kB (0%)
Build Cache     37        0         0B        0B
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           391M  2.9M  389M   1% /run
efivarfs        256K   89K  163K  36% /sys/firmware/efi/efivars
/dev/vda1        96G   63G   34G  66% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda16      881M  112M  707M  14% /boot
/dev/vda15      105M  6.1M   99M   6% /boot/efi
tmpfs           391M   16K  391M   1% /run/user/0

問題なく再起動も出来て、再起動後の容量も変わりませんでした。

結論

同エラーがでたときは慌てず Docker の Build catch を確認してみましょう。


いいなと思ったら応援しよう!