

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon ECR の使用時の Docker コマンドおよび問題のトラブルシューティング
<a name="common-errors-docker"></a>

場合によっては、Amazon ECR に対して Docker コマンドを実行すると、エラーメッセージが表示されることがあります。一般的なエラーメッセージと考えられる解決策を以下に説明します。

**Topics**
+ [Docker ログに予想されるエラーメッセージが含まれていない](#debug)
+ [Amazon ECR レポジトリからイメージをプルするときのエラー: "ファイルシステムの検証に失敗しました" または "404: イメージが見つかりません"](#error-filesystem-verification-failed)
+ [Amazon ECR からイメージをプルする際のエラー: "ファイルシステムレイヤーの検証に失敗しました"](#error-filesystem-layer-verification)
+ [レポジトリへのプッシュの際の HTTP 403 エラー、または "基本的な認証情報がありません" エラー](#error-403)

## Docker ログに予想されるエラーメッセージが含まれていない
<a name="debug"></a>

Docker 関連の問題のデバッグを開始するには、最初にホストインスタンスで実行している Docker デーモンで Docker デバッグ出力をオンにします。Amazon ECS コンテナインスタンスで Amazon ECR からプルされたイメージを使用している場合は、「*Amazon Elastic Container Service デベロッパーガイド*」の「[Docker デーモンからの詳細な出力の設定](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-debug-mode.html)」を参照してください。

## Amazon ECR レポジトリからイメージをプルするときのエラー: "ファイルシステムの検証に失敗しました" または "404: イメージが見つかりません"
<a name="error-filesystem-verification-failed"></a>

**docker pull** コマンドを使用すると、Docker 1.9 以降で Amazon ECR レポジトリからイメージをプルするときにエラー `Filesystem verification failed` が表示されます。Docker 1.9 より前のバージョンを使用するときはエラー `404: Image not found` が表示される場合があります。

考えられる理由とその説明を以下に示します。

ローカルディスクがいっぱいである  
**docker pull** を実行しているローカルディスクがいっぱいである場合、ローカルファイルで計算された SHA-1 ハッシュは、Amazon ECR で計算されたものとは異なる可能性があります。ローカルディスクに、プルしている Docker イメージを保存するのに十分な空き容量があることを確認します。新しいイメージの容量を確保するために、古いイメージを削除することもできます。**docker images** コマンドを使用して、ローカルにダウンロードしたすべての Docker イメージのリストとそのサイズを表示します。

ネットワークエラーにより、クライアントがリモートリポジトリに接続できない  
Amazon ECR レポジトリへの呼び出しでは、インターネットへの機能している接続が必要です。ネットワーク設定を確認し、他のツールやアプリケーションがインターネット上のリソースにアクセスできることを確認します。プライベートサブネットの Amazon EC2 インスタンスで **docker pull** を実行している場合は、そのサブネットにインターネットへのルートがあることを確認します。ネットワークアドレス変換 (NAT) サーバーまたはマネージド NAT ゲートウェイを使用します。  
現時点では、Amazon ECR リポジトリへの呼び出しでは、会社のファイアウォールから Amazon Simple Storage Service (Amazon S3) へのネットワークアクセスも必要です。組織で、サービスエンドポイントを許可するファイアウォールソフトウェアまたは NAT デバイスを使用している場合、現在のリージョンの Amazon S3 サービスエンドポイントが許可されていることを確認します。  
HTTP プロキシの背後で Docker を使用している場合は、適切なプロキシ設定を使用して Docker を設定できます。詳細については、Docker ドキュメントの「[HTTP プロキシ](https://docs.docker.com/engine/admin/systemd/#/http-proxy)」を参照してください。

## Amazon ECR からイメージをプルする際のエラー: "ファイルシステムレイヤーの検証に失敗しました"
<a name="error-filesystem-layer-verification"></a>

**docker pull** コマンドを使用してイメージをプルするときに、エラー `image image-name not found` が表示される場合があります。Docker のログを調べると、次のようなエラーが見つかる場合があります。

```
filesystem layer verification failed for digest sha256:2b96f...
```

このエラーは、イメージの 1 つ以上のレイヤーがダウンロードに失敗したことを示します。考えられる理由とその説明を以下に示します。

古いバージョンの Docker 使用している  
このエラーは、Docker 1.10 より前のバージョンを使用している場合に、まれに発生することがあります。Docker クライアントを 1.10 以降にアップグレードします。

クライアントでネットワークエラーまたはディスクエラーが発生した  
 `Filesystem verification failed` メッセージについて前に説明したように、ディスクがいっぱいであるか、ネットワークの問題により、1 つ以上のレイヤーをダウンロードできない可能性があります。上記の推奨事項に従って、ファイルシステムがいっぱいでないこと、およびネットワーク内から Amazon S3 へのアクセスを有効にしたことを確認します。

## レポジトリへのプッシュの際の HTTP 403 エラー、または "基本的な認証情報がありません" エラー
<a name="error-403"></a>

**aws ecr get-login-password** コマンドを使用して Docker に対して正常に認証されても、`HTTP 403 (Forbidden)` エラーが発生したり、**docker push** コマンドまたは **docker pull** コマンドからのエラーメッセージ `no basic auth credentials` が表示されたりする場合があります。この問題の既知の原因をいくつか次に示します。

別のリージョンに対して認証されている  
認証リクエストは特定のリージョンに関連付けられていて、リージョン間では使用できません。たとえば、米国西部 (オレゴン)リージョン から認可トークンを取得する場合、これを使用して、米国東部 (バージニア北部) リージョンのリポジトリに対して認証を行うことはできません。この問題を解決するには、リポジトリが存在する同じリージョンから認証トークンを取得したことを確認してください。詳細については、「[Amazon ECR でのプライベートレジストリ認証](registry_auth.md)」を参照してください。

プッシュ先として認証したリポジトリに対するアクセス許可がない  
プッシュ先のリポジトリに対するアクセス許可がありません。詳細については、「[Amazon ECR でのプライベートリポジトリポリシー](repository-policies.md)」を参照してください。

トークンの有効期限が切れた。  
`GetAuthorizationToken` オペレーションを使用して取得した認可トークンのデフォルトの有効期限は 12 時間です。

`wincred` 認証情報マネージャーのバグ  
Windows 用 Docker の一部のバージョンでは、`wincred` という認証情報マネージャーを使用しています。この認証情報マネージャーでは、**aws ecr get-login-password** によって生成された Docker ログインコマンドが適切に処理されません (詳細については、「[`CredsStore` fails with private repositories](https://github.com/moby/moby/issues/22910)」を参照してください)。出力される Docker ログインコマンドは実行できますが、イメージをプッシュまたはプルしようとすると、コマンドは失敗します。これに対処するには、**aws ecr get-login-password** から出力される Docker ログインコマンドのレジストリ引数から `https://` スキームを削除します。HTTPS スキームのない Docker ログインコマンドの例を次に示します。  

```
docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com
```