

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Docker AWS IoT Greengrass 容器中进行故障排除
<a name="docker-troubleshooting"></a>

使用以下信息来帮助您解决在 Docker 容器 AWS IoT Greengrass 中运行的问题，并调试 Docker 容器 AWS IoT Greengrass 中的问题。

**Topics**
+ [对 Docker 容器运行过程中出现的问题进行故障排除](#troubleshooting-container-errors)
+ [AWS IoT Greengrass 在 Docker 容器中进行调试](#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::: user/ *account-id* <user-name>无权在资源上执行：ecr:: GetAuthorizationToken](#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。我们建议您使用 AWS CLI 版本 2。有关更多信息，请参阅《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 版本（例如，Run:`pip install awscli --upgrade --user`）。有关更多信息，请参阅《*AWS Command Line Interface 用户指南*》中的[AWS Command Line Interface 在 Microsoft Windows 上安装](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::: user/ *account-id* <user-name>无权在资源上执行：ecr:: GetAuthorizationToken
<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)和[访问 One 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 账户身份验证和升级选项的信息。

## AWS IoT Greengrass 在 Docker 容器中进行调试
<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 `命令将 Greengrass 日志从 Docker 容器复制到临时日志目录。

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

要在容器退出或移除后仍保留日志，您必须在绑定挂载目录后运行 AWS IoT Greengrass Docker 容器。`/greengrass/v2/logs`

要绑定挂载`/greengrass/v2/logs`目录，请在运行新的 D AWS IoT Greengrass ocker 容器时执行以下任一操作。
+ 将 `-v /tmp/logs:/greengrass/v2/logs:ro` 包括在您的 `docker run` 命令中。

  在运行 `docker-compose up` 命令之前，修改 Compose 文件中的 `volumes` 块以包含以下行。

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

然后，当在 Docker 容器内运行时，你可以在主机`/tmp/logs`上查看日志，查看 Greengrass 日志 AWS IoT Greengrass 。

有关运行 Greengrass Docker 容器的信息，请参阅 [使用手动 AWS IoT Greengrass 配置在 Docker 中运行](run-greengrass-docker-manual-provisioning.md) 和 [通过自动 AWS IoT Greengrass 配置在 Docker 中运行](run-greengrass-docker-automatic-provisioning.md)

### 将交互式 Shell 附加到 Docker 容器
<a name="debugging-docker-attach-shell"></a>

当您使用 `docker exec` 在 Docker 容器内运行命令时，这些命令不会被记录在 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)。