CVAT の docker compose (docker-compose) 後にログイン画面が表示できない問題への対処+新バージョン移行
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 を起動すると問題を再現することができる。
- cvat を clone して
docker composeあるいはdocker-composeを使用して必要なリソースを全て起動する。git clone https://github.com/opencv/cvat.git cd cvat # v2.11.1 相当のバージョンをチェックアウト git checkout bf4089ead320d8f6a80e0a1793c8406ec46daee8 # または v2.54.0 のバージョンをチェックアウト git checkout v2.54.0 docker compose up -d - ブラウザを起動して
http://localhost:8080へアクセスする。 -
Connecting...の状態で 30秒 待たされる。

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. - エラーダイアログ
3. ストレージ不足問題を突破してCVATをローカルで実行する方法
以下のとおりの手順でCVATを起動する。私が本家のCVATリポジトリをForkしてストレージ制限を解除したカスタムCVATを作成してGitHubへコミット済みのものを使用する。
3-1. Custom CVAT リポジトリ
3-2. 修正した箇所は2箇所のみ
django の起動時ヘルスチェックのうち、ストレージ空き容量に関するチェック部分の 10 (10%の意味) を None に書き換える。なお、私のカスタムCVATのリポジトリにコミットされているリソースはすでに修正を反映済みのため、下記の修正を加える必要はない。
3-3. 該当のissue
3-4. Custom CVAT の実行手順
下記を順番に実行するだけ。
### 方法1:
# v2.11.1 相当のリソースをcloneする
git clone https://github.com/PINTO0309/cvat_custom.git
cd cvat_custom
### 方法2:
# または 最新のソースコードを clone して v2.54.0 のバージョンをチェックアウト
# docker compose を使用している場合、旧バージョンで貯めていたデータは volumes
# に保持されているため docker compose down -v を実行していない限り保全されている
git clone https://github.com/cvat-ai/cvat.git
cd cvat
git checkout v2.54.0
# 下記2枚のファイルの末尾に
cvat/settings/production.py
cvat/settings/testing_rest.py
# 下記を追記
HEALTH_CHECK = {
'DISK_USAGE_MAX': None,
}
# 旧バージョンで貯めていたデータの保存先(docker の vlolumes) を調べる
# 下記の場合、*_cvat_data と *_cvat_db を再マウントすると復旧できる
# 筆者は cvat_custom_cvat_* と cvat_cvat_* の2種類が表示されているが
# cvat_custom_cvat_* 環境で過去ずっと作業していたのでこちらを再マウントする
docker volume ls | grep cvat
local cvat_custom_cvat_cache_db
local cvat_custom_cvat_data
local cvat_custom_cvat_db
local cvat_custom_cvat_events_db
local cvat_custom_cvat_inmem_db
local cvat_custom_cvat_keys
local cvat_custom_cvat_logs
local cvat_cvat_cache_db
local cvat_cvat_data
local cvat_cvat_db
local cvat_cvat_events_db
local cvat_cvat_keys
local cvat_cvat_logs
# docker-compose.yml の最下部を下記のように修正して過去のDBやデータ類を再マウント
# するように調整する。これで旧バージョンのcvatから新バージョンのcvatへデータを丸ごと
# 移行した状態で起動することができる
# ポイントは external: true と name: を追加で指定して外部のvolumeを指定し、
# cvat_db というエイリアスで docker compose に参照させるようにすること
# volumes:
# cvat_db:
# cvat_data:
# cvat_keys:
# cvat_logs:
# cvat_inmem_db:
# cvat_events_db:
# cvat_cache_db:
volumes:
cvat_db:
external: true
name: cvat_custom_cvat_db
cvat_data:
external: true
name: cvat_custom_cvat_data
cvat_keys:
cvat_logs:
cvat_inmem_db:
cvat_events_db:
cvat_cache_db:
# 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. 参照
CVATをバージョンアップしたあとに起動できなくなる問題を解消するために cache_db を初期化する
Discussion