👌

Azure VM上のDify「Internal Server Error」の原因と対処

に公開

問題の概要

  • Azure VM上にインストールしたDifyでInternal Server Errorが発生
  • ディスク容量が100%使用されており、システムが正常に動作できない状態だった

原因

  • Dockerのoverlay2ディレクトリに24GBもの古いレイヤーデータが蓄積
  • コンテナの更新やビルドを繰り返す中で、未使用の古いイメージやレイヤーが自動的に削除されず残っていた
  • コマンド確認:sudo du -sh /var/lib/docker/overlay2 → 24GB使用

対処法

  1. ログファイルのクリア(少量の空き容量確保)

    sudo find /var/lib/docker/containers/ -name "*.log" -exec truncate -s 0 {} \;
    
  2. Dockerの未使用リソースをクリーンアップ(主な解決策)

    docker system prune -a --force
    

結果

  • ディスク使用率が100%から58%に減少(13GBの空き容量を確保)
  • Difyが正常に動作するようになった

今後の対策

  1. 更新スクリプト([自身の環境のディレクトリ]/update_dify.sh)にクリーンアップコマンドを追加

    #!/bin/bash
    
    # 作業ディレクトリに移動
    cd [自身の環境のディレクトリ]/dify/docker/
    
    # Docker Composeで停止
    docker-compose down
    
    # Gitリポジトリを最新に更新
    git pull origin main
    
    # Docker Composeでビルドして起動
    docker-compose up -d --build
    
    # 不要なDockerリソースをクリーンアップ
    docker system prune -a --force
    
  2. Dockerログローテーション設定の追加

    # ディレクトリがない場合は作成
    sudo mkdir -p /etc/docker
    
    # ファイルを作成
    sudo tee /etc/docker/daemon.json << EOF
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    EOF
    
    # Dockerサービスを再起動して設定を反映
    sudo systemctl restart docker
    
    • この設定により、コンテナログが1コンテナあたり最大30MB(10MB×3ファイル)に制限される
    • 現状は設定ファイル(/etc/docker/daemon.json)が存在していないため、新規作成が必要
    • 設定反映にはDockerサービスの再起動が必要なため、メンテナンス時間中に実施を推奨

これらの対応により、Difyの運用時に同様のディスク容量不足問題が再発するリスクを大幅に軽減できます。

Discussion