

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對使用 Amazon ECR 時的 Docker 命令和問題進行故障診斷
<a name="common-errors-docker"></a>

在某些情況下，對 Amazon ECR 執行 Docker 命令可能會導致錯誤訊息。以下說明了一些一般錯誤訊息與潛在解決方案。

**Topics**
+ [Docker 日誌不包含預期的錯誤訊息](#debug)
+ [當從 Amazon ECR 儲存庫提取映像時，出現錯誤：「Filesystem Verification Failed」(檔案系統驗證失敗) 或「404: Image Not Found」(404：找不到映像)](#error-filesystem-verification-failed)
+ [當從 Amazon ECR 提取映像時出現錯誤：「Filesystem Layer Verification Failed」(檔案系統分層驗證失敗)](#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 儲存庫提取映像時，出現錯誤：「Filesystem Verification Failed」(檔案系統驗證失敗) 或「404: Image Not Found」(404：找不到映像)
<a name="error-filesystem-verification-failed"></a>

在 Docker 1.9 或以上版本中使用 **docker pull** 命令從 Amazon ECR 儲存庫映像時，您可能收到錯誤 `Filesystem verification failed`。當您使用 Docker 1.9 以前的版本時，您可能會收到錯誤 `404: Image not found`。

以下列出一些可能的原因及其說明。

本機磁碟已滿  
若您正在執行 **docker pull** 的本機磁碟已滿，則在本機檔案上計算的 SHA-1 雜湊，可能與 Amazon ECR 計算的 SHA-1 雜湊不同。檢查您的本機磁碟有足夠的剩餘空間以儲存您提取的 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 提取映像時出現錯誤：「Filesystem Layer Verification Failed」(檔案系統分層驗證失敗)
<a name="error-filesystem-layer-verification"></a>

當您使用 **docker pull** 命令提取映像時，您可能會收到錯誤 `image image-name not found`。若您檢查 Docker 日誌時，您可能會看到像下列的錯誤：

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

此錯誤表示一個或更多的映像分層下載失敗。以下列出一些可能的原因及其說明。

您可能正在使用較舊版本的 Docker  
在您使用低於 1.10 版本的 Docker 時，有少許機率會出現此錯誤。將您的 Docker 用戶端更新為 1.10 或更新的版本。

您的用戶端遭遇網路或磁碟錯誤  
 完全的磁碟或網路錯誤可能阻礙一個或更多分層的下載，如同稍早討論過的 `Filesystem verification failed` 訊息。遵循上述建議，以確保您的檔案系統未滿，且已在您的網路中啟用存取 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` 憑證管理工具中的錯誤  
某些版本的 Docker for Windows 使用名為 的登入資料管理員`wincred`，無法正確處理 產生的 Docker 登入命令 **aws ecr get-login-password**（如需詳細資訊，請參閱 [`CredsStore` 使用私有儲存庫失敗](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
```