

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

# 在 Docker AWS IoT Greengrass 容器中進行故障診斷
<a name="docker-troubleshooting"></a>

使用下列資訊來協助您對 AWS IoT Greengrass 在 Docker 容器中執行的 問題進行故障診斷，並對 AWS IoT Greengrass Docker 容器中的 問題進行偵錯。

**Topics**
+ [對執行 Docker 容器的問題進行故障診斷](#troubleshooting-container-errors)
+ [在 Docker AWS IoT Greengrass 容器中偵錯](#debugging-greengrass-in-docker)

## 對執行 Docker 容器的問題進行故障診斷
<a name="troubleshooting-container-errors"></a>

使用以下資訊來協助疑難排解在 Docker 容器中執行 AWS IoT Greengrass 的問題。

**Topics**
+ [錯誤：無法從非 TTY 裝置執行互動式登入](#docker-troubleshootin-ecr-get-login-password)
+ [錯誤：不明選項：-no-include-email](#docker-troubleshooting-cli-version)
+ [錯誤：防火牆封鎖了 Windows 和容器之間的檔案共用。](#docker-troubleshooting-firewall)
+ [錯誤：呼叫 GetAuthorizationToken 操作時發生錯誤 (AccessDeniedException)：使用者：arn：aws：iam：：*account-id*：user/<user-name> 未獲授權在資源上執行：ecr：GetAuthorizationToken：\$1](#docker-troubleshooting-ecr-perms)
+ [錯誤：您已經達到提取率限制](#docker-troubleshooting-too-many-requests)

### 錯誤：無法從非 TTY 裝置執行互動式登入
<a name="docker-troubleshootin-ecr-get-login-password"></a>

當您執行 `aws ecr get-login-password`命令時，可能會發生此錯誤。請確定您已安裝最新版本 AWS CLI 2 或版本 1。我們建議您使用 第 2 AWS CLI 版。如需詳細資訊，請參閱「AWS Command Line Interface 使用者指南」**中的[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

### 錯誤：不明選項：-no-include-email
<a name="docker-troubleshooting-cli-version"></a>

當您執行 `aws ecr get-login`命令時，可能會發生此錯誤。請確定您已安裝 AWS CLI 最新版本 （例如，執行：`pip install awscli --upgrade --user`)。如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的在 [Microsoft Windows AWS Command Line Interface 上安裝](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) 。

### 錯誤：防火牆封鎖了 Windows 和容器之間的檔案共用。
<a name="docker-troubleshooting-firewall"></a>

在 Windows 電腦上執行 Docker 時，您可能會收到此錯誤或`Firewall Detected`訊息。如果您登入虛擬私有網路 (VPN)，而您的網路設定防止掛載共用磁碟機，也可能會發生這個錯誤。在這種情況下，請關閉 VPN 並重新執行 Docker 容器。

### 錯誤：呼叫 GetAuthorizationToken 操作時發生錯誤 (AccessDeniedException)：使用者：arn：aws：iam：：*account-id*：user/<user-name> 未獲授權在資源上執行：ecr：GetAuthorizationToken：\$1
<a name="docker-troubleshooting-ecr-perms"></a>

如果您沒有足夠的許可來存取 Amazon ECR 儲存庫，則執行 `aws ecr get-login-password`命令時可能會收到此錯誤。如需詳細資訊，請參閱《[Amazon ECR 使用者指南》中的 Amazon ECR 儲存庫政策範例](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html)**[和存取一個 Amazon ECR 儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html)。

### 錯誤：您已經達到提取率限制
<a name="docker-troubleshooting-too-many-requests"></a>

Docker Hub 限制匿名和 Free Docker Hub 使用者可以提出的提取請求數量。如果您超過匿名或免費使用者提取請求的速率限制，則會收到下列其中一個錯誤：

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

若要解決這些錯誤，您可以等待幾個小時，然後再嘗試另一個提取請求。如果您打算持續提交大量提取請求，請參閱 [Docker Hub 網站](https://www.docker.com/increase-rate-limits)，以取得速率限制的相關資訊，以及驗證和升級 Docker 帳戶的選項。

## 在 Docker AWS IoT Greengrass 容器中偵錯
<a name="debugging-greengrass-in-docker"></a>

為了對 Docker 容器的問題進行偵錯，您可以保留 Greengrass 執行時間日誌或將互動式 shell 連接到 Docker 容器。

### 在 Docker 容器外保留 Greengrass 日誌
<a name="debugging-docker-persist-logs"></a>

停止 AWS IoT Greengrass 容器之後，您可以使用下列`docker cp `命令，將 Docker 容器的 Greengrass 日誌複製到暫時日誌目錄。

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

若要即使在容器結束或移除之後仍保留日誌，您必須在繫結掛載`/greengrass/v2/logs`目錄之後執行 AWS IoT Greengrass Docker 容器。

若要繫結掛載`/greengrass/v2/logs`目錄，請在執行新的 Docker AWS IoT Greengrass 容器時執行下列其中一項操作。
+ 將 包含在`docker run`命令`-v /tmp/logs:/greengrass/v2/logs:ro`中。

  在執行`docker-compose up`命令之前，修改 Compose 檔案中的 `volumes` 區塊，以包含以下行。

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

然後，您可以在主機`/tmp/logs`上檢查日誌，在 AWS IoT Greengrass Docker 容器內執行時查看 Greengrass 日誌。

如需有關執行 Greengrass Docker 容器的資訊，請參閱 [使用手動佈建在 Docker AWS IoT Greengrass 中執行](run-greengrass-docker-manual-provisioning.md) 和 [使用自動佈建在 Docker AWS IoT Greengrass 中執行](run-greengrass-docker-automatic-provisioning.md)

### 將互動式 shell 連接至 Docker 容器
<a name="debugging-docker-attach-shell"></a>

當您使用 在 Docker 容器內`docker exec`執行命令時，這些命令不會擷取在 Docker 日誌中。在 Docker 日誌中記錄命令可協助您調查 Greengrass Docker 容器的狀態。執行以下任意一項：
+ 在個別終端機中執行下列命令，將終端機的標準輸入、輸出和錯誤連接至執行中的容器。這可讓您從目前的終端機檢視和控制 Docker 容器。

  ```
  docker attach container-id
  ```
+ 在個別終端機中執行下列命令。這可讓您以互動式模式執行命令，即使未連接容器也一樣。

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

如需一般 AWS IoT Greengrass 故障診斷，請參閱 [故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。