Skip to content

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

解決手順:

  1. Dockerログインの確認:
    bash
    docker login
  2. リポジトリURLの更新
  3. 公式ドキュメントで最新のリポジトリ名を確認

完全な修正例

以下は修正後の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"]

トラブルシューティングのチェックリスト

  1. Dockerfileの確認 - ステージ名の参照が正しいか
  2. プラットフォーム指定 - --platformフラグの追加
  3. ログイン状態 - docker loginの実行
  4. リポジトリ名 - 最新の公式イメージ名を使用しているか
  5. ネットワーク接続 - レジストリへのアクセスが可能か

まとめ

「pull access denied」エラーは主に以下の原因で発生します:

  • 不正なステージ参照
  • アーキテクチャの不一致
  • 認証問題や古いリポジトリ名

これらの問題を系統的に確認することで、ほとんどのケースで解決が可能です。Dockerのビルドプロセスを理解し、適切な参照と設定を行うことが重要です。