Development Server Docker [Docker] Docker Compose GHCRの認証とMilvusボリューム初期化

概要

Docker ComposeでMilvusスタックを実行する際に発生したGHCRプライベートイメージの認証エラーとRocksDB WALボリューム競合の解決方法をまとめる。

まとめ

1. GHCRプライベートイメージの認証

docker-compose.ymlでGitHub Container Registry(GHCR)のプライベートイメージを使用する場合、認証なしでpullしようとすると以下のエラーが発生する。

Error response from daemon: unknown: failed to resolve reference
"ghcr.io/wookbros/milvus/milvus-ko:v2.5.27-r1-arm64":
unexpected status from HEAD request to
https://ghcr.io/v2/wookbros/milvus/milvus-ko/manifests/v2.5.27-r1-arm64:
403 Forbidden

GHCRのプライベートイメージをpullするには、GitHub Personal Access Token(PAT)で認証する必要がある。以下のコマンドでログインする。

echo YOUR_PAT_TOKEN | docker login ghcr.io -u GITHUB_USERNAME --password-stdin

PATを作成する際、read:packages権限を必ず含める必要がある。GitHubのSettings > Developer settings > Personal access tokensから作成できる。

ログインに成功するとLogin Succeededが表示され、以降はdocker-compose up -dコマンドで正常にイメージをpullできる。

2. Milvusボリュームの初期化

GHCR認証問題を解決した後、docker-compose up -dを実行するとmilvus-standaloneコンテナがクラッシュする場合がある。ログを確認すると以下のエラーが表示される。

FATAL: fail to init rocksmq
error="Corruption: While creating a new Db,
wal_dir contains existing log file: 000011.log"

以前使用していたボリュームデータに残っているRocksDB WALファイルが新しいMilvusインスタンスと競合して発生する問題である。ボリュームを削除してコンテナを再起動すれば解決する。

docker-compose down
rm -rf ./volumes/milvus
docker-compose up -d

ボリュームを削除すると既存データがすべて失われるため、開発環境でのみこの方法を使用するべきである。本番環境ではデータをバックアップしてから進める必要がある。

参考

コメントする