🙂

CVAT の docker compose (docker-compose) 後にログイン画面が表示できない問題への対処

2024/03/08に公開

1. CVAT標準のdockerコンテナの問題点

django のwebサーバーの起動時ヘルスチェックのデフォルト設定として ストレージの空き容量がストレージの全体容量の10%以上であること というものがある。しかし、2TBストレージを持つ私のメインPCは常時 2% しかストレージの空き容量を確保できない状態であり、CVATを docker compose 経由で起動することができないという問題がある。WEB版のCVAT(10プロジェクトまでは無料)の操作性は遜色ないが、1週間に1度ほどの頻度でWEBサーバーが非常に不安定になる問題が昔からずっと続いており、アノテーション結果のダウンロードや、アノテーション作業の途中経過の保存操作で数時間待たされた挙句、サーバーエラーとなって全ての操作が失敗する事象が頻発するため非常に不安定である。作業効率が著しく悪いため、WEB版のCVATからローカル版のCVATへ意地でも移行したい。

なお、ローカルストレージに 10% 以上の空き容量を確保できない人は少ないため、この問題の解決方法を明示的に整理している記事は見つからなかった。

2. 問題点の再現方法

下記の通り、公式のチュートリアルどおりに docker compose あるいは docker-compose を使用して CVAT を起動すると問題を再現することができる。

  1. cvat を clone して docker compose あるいは docker-compose を使用して必要なリソースを全て起動する。
    git clone https://github.com/opencv/cvat.git
    cd cvat
    # v2.11.1 相当のバージョンをチェックアウト
    git checkout bf4089ead320d8f6a80e0a1793c8406ec46daee8
    docker compose up -d
    
  2. ブラウザを起動して http://localhost:8080 へアクセスする。
  3. Connecting... の状態で 30秒 待たされる。
    waiting
    4. 30秒後、突然エラーが表示され、ログイン画面が表示されるはずのタイミングで下記のエラーがダイアログでポップアップしてきてCVATにアクセスできない。なお、表示されるエラーメッセージは無意味なものであり、ログイン画面にアクセスできない原因を一切示唆していない。
  • エラーメッセージ
    Cannot connect to the server
    Make sure the CVAT backend and all necessary services
    (Database, Redis and Open Policy Agent) are running and available.
    If you upgraded from version 2.2.0 or earlier,
    manual actions may be needed, see the Upgrade Guide.
    
  • エラーダイアログ
    error

3. ストレージ不足問題を突破してCVATをローカルで実行する方法

以下のとおりの手順でCVATを起動する。私が本家のCVATリポジトリをForkしてストレージ制限を解除したカスタムCVATを作成してGitHubへコミット済みのものを使用する。

3-1. Custom CVAT リポジトリ

https://github.com/PINTO0309/cvat_custom

3-2. 修正した箇所は2箇所のみ

django の起動時ヘルスチェックのうち、ストレージ空き容量に関するチェック部分の 10 (10%の意味) を None に書き換える。なお、私のカスタムCVATのリポジトリにコミットされているリソースはすでに修正を反映済みのため、下記の修正を加える必要はない。

https://github.com/PINTO0309/cvat_custom/blob/f8935a48e0a20396558d7381169235bd79cf3d7b/cvat/settings/production.py#L15-L17

https://github.com/PINTO0309/cvat_custom/blob/f8935a48e0a20396558d7381169235bd79cf3d7b/cvat/settings/testing_rest.py#L24-L26

3-3. 該当のissue

3-4. Custom CVAT の実行手順

下記を順番に実行するだけ。

# v2.11.1 相当のリソースをcloneする
git clone https://github.com/PINTO0309/cvat_custom.git
cd cvat_custom

# CVAT docker image を自力ビルドする
docker compose \
-f docker-compose.yml \
-f docker-compose.dev.yml \
build

# CVAT を起動する
docker compose up -d

# スーパーユーザーを作成する
docker exec -it cvat_server bash \
-ic 'python3 ~/manage.py createsuperuser'

# ココで、ユーザー名、e-mailアドレス、パスワード、パスワード(再) を設定する

ブラウザを起動して http://localhost:8080 へアクセスする。下図のようなログイン画面が表示されれば成功。

ログイン後のトップポータル。ここに Projects なり Tasks なりを追加してローカルだけで全ての作業を完結することができる。

以上、Good luck!

4. 参照

https://github.com/opencv/cvat

https://opencv.github.io/cvat/docs/administration/basics/installation/

https://github.com/opencv/cvat/issues/5449

https://pypi.org/project/django-health-check/

https://github.com/revsys/django-health-check

Discussion