Docker image not found エラーの原因と解決方法を徹底解説
はじめに
Dockerを使用していると、突然「Docker image not found」というエラーに遭遇することがあります。このエラーは初心者だけでなく、経験者でも発生することのある一般的な問題です。本記事では、このエラーが発生する原因から、具体的な解決手順、実践的なコード例まで、わかりやすく解説します。
Docker image not found エラーとは
「Docker image not found」エラーは、Dockerコンテナの起動時に、指定されたイメージが見つからない場合に発生します。このエラーメッセージは、以下のような形で表示されることが多いです:
docker: Error response from daemon: pull access denied for myimage, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
または
Unable to find image 'myimage:latest' locally
原因の詳細な説明
1. イメージ名のタイプミス
最も一般的な原因は、イメージ名を誤って入力することです。Dockerイメージ名は大文字小文字を区別します。例えば、「MyImage」と「myimage」は別のイメージとして認識されます。
2. イメージがローカルに存在しない
必要なDockerイメージがローカル環境にダウンロードされていない場合、エラーが発生します。イメージはDocker Hubなどのレジストリから事前にpullする必要があります。
3. レジストリの指定ミス
プライベートレジストリを使用している場合、レジストリのURLを正しく指定していないとイメージが見つかりません。例えば、「gcr.io/myproject/myimage」のように、完全なレジストリパスの指定が必要です。
4. タグの指定ミスまたは存在しないタグ
「myimage:v1.0」のようにタグを指定した場合、そのタグが実際に存在しないと、エラーが発生します。
5. Docker認証の問題
プライベートレジストリを使用する場合、適切な認証情報がないとイメージにアクセスできません。
解決手順
ステップ1:ローカルのDockerイメージを確認
まず、ローカルにどのようなDockerイメージが存在するのかを確認します。以下のコマンドを実行してください:
docker images
このコマンドにより、ローカルに保存されているすべてのDockerイメージが表示されます。表示される情報は以下の通りです:
- REPOSITORY:イメージのリポジトリ名
- TAG:イメージのバージョンタグ
- IMAGE ID:イメージの一意識別子
- CREATED:イメージが作成された日時
- SIZE:イメージのサイズ
ステップ2:イメージ名とタグを正確に確認
上記のコマンド結果から、実際に使用しようとしているイメージが存在するか確認します。存在しない場合は、次のステップに進んでください。
ステップ3:イメージをDocker Hubからpull
必要なイメージが見つからない場合、Docker Hubからダウンロードします。以下のコマンドを実行してください:
docker pull イメージ名
例えば、Ubuntuのイメージをpullする場合:
docker pull ubuntu:20.04
ステップ4:プライベートレジストリを使用する場合
プライベートレジストリを使用している場合は、まび認証が必要です:
docker login レジストリURL
username: your_username
password: your_password
認証後、以下のコマンドでイメージをpullします:
docker pull レジストリURL/イメージ名:タグ
ステップ5:イメージを確認して実行
イメージをpullした後、再度「docker images」コマンドで確認します:
docker images
イメージが表示されたら、コンテナを起動できます:
docker run -d イメージ名:タグ
実践的なコード例
例1:基本的なUbuntuコンテナの実行
#!/bin/bash
# Ubuntuイメージをpull
docker pull ubuntu:20.04
# イメージが正しくpullされたか確認
docker images | grep ubuntu
# コンテナを実行
docker run -it ubuntu:20.04 /bin/bash
例2:Dockerfileを使用したカスタムイメージの作成
# Dockerfileの内容
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
python3 \
python3-pip
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]
このDockerfileを使用してイメージをビルドします:
# イメージをビルド
docker build -t myapp:1.0 .
# ビルドが成功したか確認
docker images | grep myapp
# コンテナを実行
docker run -d myapp:1.0
例3:プライベートレジストリからのイメージpull
#!/bin/bash
# GCR(Google Container Registry)の場合の例
# 事前にgcloud authを設定している必要があります
# 認証情報を取得
gcloud auth configure-docker
# イメージをpull
docker pull gcr.io/my-project/my-image:latest
# イメージが存在することを確認
docker images
# コンテナを実行
docker run -d gcr.io/my-project/my-image:latest
例4:docker-compose.ymlでの定義
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: my-custom-app:1.0
build:
context: .
dockerfile: Dockerfile
environment:
- DATABASE_URL=postgres://db:5432/mydb
depends_on:
- db
db:
image: postgres:13
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mydb
このファイルを使用してコンテナを起動する場合:
docker-compose up -d
よくある間違いと対策
間違い1:イメージ名と実行時の名前が異なる
間違った例:
# イメージをビルド
docker build -t my-app .
# 別の名前で実行しようとする
docker run my-image:latest
正しい例:
# イメージをビルド
docker build -t my-app .
# ビルドしたイメージ名で実行
docker run my-app
間違い2:タグを指定しない場合のデフォルト動作を理解していない
タグを指定しないと、自動的に「latest」が使用されます。しかし、「latest」というタグが存在しない場合、エラーが発生します。
間違った例:
docker build -t my-app:v1.0 .
docker run my-app # latestというタグを探そうとする
正しい例:
docker build -t my-app:v1.0 .
docker run my-app:v1.0
間違い3:認証なしでプライベートレジストリにアクセス
間違った例:
docker pull private-registry.com/my-image:latest
# 認証していないため、エラーが発生
正しい例:
docker login private-registry.com
# ユーザー名とパスワードを入力
docker pull private-registry.com/my-image:latest
間違い4:レジストリURLの指定ミス
間違った例:
docker pull my-image:latest
# Docker Hubでこのリポジトリが見つからない場合、エラーが発生
正しい例:
docker pull gcr.io/my-project/my-image:latest
# 完全なレジストリパスを指定
間違い5:大文字小文字の混同
Dockerイメージ名は大文字小文字を区別します。
間違った例:
docker build -t MyApp:latest .
docker run myapp:latest # MyAppではなくmyappを指定
正しい例:
docker build -t myapp:latest .
docker run myapp:latest # 一致させる
トラブルシューティングコマンド集
エラーが発生した場合に役立つコマンドをまとめました:
# ローカルのイメージを確認
docker images
# 特定のイメージを検索
docker images | grep イメージ名
# イメージの詳細情報を確認
docker inspect イメージID
# イメージのpullログを確認
docker pull イメージ名 --verbose
# コンテナのログを確認
docker logs コンテナID
# Dockerシステム全体の情報を確認
docker system df
# 使用していないイメージをクリーンアップ
docker image prune
# すべてのイメージをリスト表示(ダイジェスト付き)
docker images --digests
Docker Hub以外のレジストリを使用する場合の注意点
Amazon ECR(Elastic Container Registry)の場合
# AWS CLIで認証
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com
# イメージをpull
docker pull 123456789.dkr.ecr.us-east-1.amazonaws.com/my-image:latest
Azure Container Registry(ACR)の場合
# Azure CLIで認証
az acr login --name myregistry
# イメージをpull
docker pull myregistry.azurecr.io/my-image:latest
パフォーマンスと最適化のヒント
Dockerイメージ関連の作業を効率的に行うため、以下の最適化方法を参考にしてください:
- イメージサイズの削減:不要なレイヤーを削除し、マルチステージビルドを活用します。
- キャッシュの活用:Dockerfileの命令順序を工夫して、ビルドキャッシュを効果的に使用します。
- 定期的なクリーンアップ:「docker image prune」で未使用のイメージを削除します。
まとめ
「Docker image not found」エラーは、正しい知識と対策があれば、簡単に解決できます。主な解決方法をまとめると以下の通りです:
- 原因を特定する:「docker images」コマンドでローカルのイメージを確認し、エラーの原因を特定します。
- イメージ名を正確に確認:大文字小文字や完全なレジストリパスを含め、正確なイメージ名を使用します。
- イメージをpullする:必要なイメージをDocker Hubやその他のレジストリからダウンロードします。
- 認証を設定する:プライベートレジストリを使用する場合は、事前に認証情報を設定します。
- タグを明示的に指定:「latest」に頼るのではなく、具体的なバージョンタグを指定します。
今後、このエラーに遭遇した際は、本記事で紹介した手順とコード例を参考にしながら、段階的に問題を解決してください。Dockerの仕組みをしっかり理解することで、より効率的なコンテナ開発ができるようになります。
また、エラーメッセージを丁寧に読むことも重要です。エラーメッセージには、問題解決のための重要な情報が含まれていることが多いため、焦らずに確認することをお勧めします。

