Dockerビルドでのpullアクセス拒否エラーとその解決方法
Dockerイメージのビルド中に「pull access denied」や「repository does not exist」といったエラーが発生することはよくある問題です。この記事では、その原因と効果的な解決策を解説します。
問題の概要
Dockerビルド実行時に以下のようなエラーが発生します:
failed to load cache key: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
このエラーは、Dockerがイメージの取得(pull)に失敗したことを示しています。
主な原因と解決策
1. ステージ名の誤りによるエラー
最も一般的な原因は、Dockerfile内での不正なステージ参照です。
問題のあるコード:
dockerfile
COPY --from=publish/app /app .
解決策:
dockerfile
COPY --from=build /app .
説明:
- Dockerは
--from=publish/app
を外部イメージとして解釈しようとします - 存在しないイメージ名を指定すると、リポジトリが存在しないエラーが発生します
- 正しいビルドステージ名(例:
build
)を指定することで解決します
2. アーキテクチャの不一致によるエラー
システムアーキテクチャとターゲットイメージのアーキテクチャが一致しない場合も同様のエラーが発生します。
解決策:
bash
docker build . --platform linux/amd64
説明:
- 特にM1 MacなどのARMアーキテクチャ環境では発生しやすい
--platform
フラグで明示的にアーキテクチャを指定することで解決- 互換性のあるイメージを強制的に取得します
3. 認証問題とリポジトリ名の変更
注意
Docker Hubのリポジトリ名は定期的に変更されることがあります
古いリポジトリ名:
dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim
新しいリポジトリ名:
dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim
解決手順:
- Dockerログインの確認:bash
docker login
- リポジトリURLの更新
- 公式ドキュメントで最新のリポジトリ名を確認
完全な修正例
以下は修正後のDockerfileの例です:
dockerfile
# ベースイメージの取得
FROM mcr.microsoft.com/dotnet/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# ビルドステージ
FROM mcr.microsoft.com/dotnet/sdk:3.1-buster AS build
WORKDIR /src
COPY ["src/App.Web/App.Web.csproj", "src/App.Web/"]
RUN dotnet restore "App.Web.csproj"
COPY . .
WORKDIR "/src/App.Web"
RUN dotnet build App.Web.csproj -c Debug -o /app
# デバッグステージ
FROM build as debug
RUN dotnet publish "App.Web.csproj" -c Debug -o /app
# 最終ステージ
FROM base as final
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet","App.Web.dll"]
トラブルシューティングのチェックリスト
- Dockerfileの確認 - ステージ名の参照が正しいか
- プラットフォーム指定 -
--platform
フラグの追加 - ログイン状態 -
docker login
の実行 - リポジトリ名 - 最新の公式イメージ名を使用しているか
- ネットワーク接続 - レジストリへのアクセスが可能か
まとめ
「pull access denied」エラーは主に以下の原因で発生します:
- 不正なステージ参照
- アーキテクチャの不一致
- 認証問題や古いリポジトリ名
これらの問題を系統的に確認することで、ほとんどのケースで解決が可能です。Dockerのビルドプロセスを理解し、適切な参照と設定を行うことが重要です。