参考資料
まずやるべき重要なこと
404エラーの文言が「どこで見つからなかったか」を最初に確認することが、原因特定(名前・タグ・リポジトリのいずれか)の近道
1. タグの確認と修正
原因: レジストリに指定したタグが存在しない、またはタグ省略時に latest がないため。
対応: Docker Hubなどで実在するタグを確認し、Dockerfileやコマンド上で明示する。
# タグを明示してイメージを取得(latestを使わない)
docker pull <username>/<image_name>:<specific_tag>
2. 認証とアクセス権の確認
原因: 非公開リポジトリへのアクセス権がない、またはログインしていないため。
対応: docker login でログインし、アカウントに適切な権限があるか確認する。
# リポジトリへのアクセスが必要なレジストリにログイン
docker login <registry_url>
# 再試行
docker pull <username>/<image_name>:<tag>
3. リポジトリ名と綴りの確認
原因: リポジトリ名の誤り、または大文字混在(Dockerは小文字のみ許可)による無効な形式。
対応: レジストリのウェブ画面でリポジトリ名の実在と綴り(小文字のみ)を確認し、修正する。
# 正しいリポジトリ名(小文字)で実行
docker pull <lowercase_repository_name>:<tag>
4. コンテナ・イメージの存在確認
原因: コンテナが削除済み、またはローカルイメージが存在しないため。
対応: docker ps -a や docker images で状態を確認し、必要に応じて再作成・再取得する。
# 削除されたコンテナがないか確認
docker ps -a
# ローカルのイメージ一覧を確認
docker images
# イメージがない場合は再取得
docker pull <username>/<image_name>:<tag>
5. レジストリ接続先の確認
原因: ポート番号の誤りなどで、通常のウェブサーバーに接続してしまいHTMLの404を返されている場合。
対応: 正しいレジストリURLとポート番号を確認し、接続先を修正する。
# 正しいレジストリを指定してログイン
docker login <correct_registry_url>:<port>
コンテナ名の確認(Docker Compose特有の注意点)
Docker Composeで起動したコンテナには、自動的に プロジェクト名_サービス名_連番 という形式の名前が付けられる
docker-compose.yml で定義した「サービス名」そのままでは docker ps などで見つからないことがある。
# Compose管理下のサービス名と、実際に稼働しているコンテナ名の対応を確認
docker compose ps
Docker Compose イメージとタグの確認
原因が「手元のデーモンにその名前の資源がない」場合、Composeファイルで指定したイメージがローカルに存在するか確認
# 手元のイメージの名前とタグを確認
docker images
Docker Hubなどで実在するタグを確認し、docker-compose.yml 上で明示的にタグを指定しているか再確認
Docker Compose 名前空間と認証の確認
push/pull時や、ビルド時に404やアクセス拒否が発生する場合、名前空間(library/ などの解釈)や認証状態が原因であることがある
確認・復旧コマンド
# レジストリへの認証状態を作り直す
docker login
# 完全な名前(レジストリ/名前空間/イメージ:タグ)で取得を再試行
docker pull docker.io/<ユーザー名>/<イメージ名>:<タグ>
docker login は成功しているのに denied: requested access to the resource is denied が出る場合、出力に library/ が含まれていないか、名前空間の解釈を確認
Docker Composeにおけるまとめ
Docker Composeを使用している場合でも、docker ps -a や docker images などの基本コマンドは有効
docker compose ps を使用してサービス名と実際のコンテナ名のマッピングを確認することが、障害対応(特に404エラー時の原因特定)において確実な近道