在 Docker Amazon IoT Greengrass 容器中进行故障排除 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Docker Amazon IoT Greengrass 容器中进行故障排除

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

对 Docker 容器运行过程中出现的问题进行故障排除

使用以下信息来帮助解决在 Docker 容器 Amazon IoT Greengrass 中运行的问题。

错误:无法在非TTY设备上进行交互式登录

运行 aws ecr get-login-password 命令时,可能会出现此错误。确保您安装了最新的 Amazon CLI 版本 2 或版本 1。我们建议您使用 Amazon CLI 版本 2。有关更多信息,请参阅Amazon Command Line Interface 《用户指南》中的安装 Amazon CLI

错误:未知选项:-no-include-email

运行 aws ecr get-login 命令时,可能会出现此错误。确保安装了最新 Amazon CLI 版本(例如,Run:pip install awscli --upgrade --user)。有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的Amazon Command Line Interface 在 Microsoft Windows 上安装

错误:防火墙阻止 Windows 和容器之间的文件共享。

在 Windows 计算机上运行 Docker 时,您可能会收到此错误或 Firewall Detected 消息。如果您在虚拟专用网络 (VPN) 上登录,并且您的网络设置阻止了共享云端硬盘的挂载,也可能发生这种情况。在这种情况下,请关闭VPN并重新运行 Docker 容器。

错误:调用 GetAuthorizationToken 操作时出现错误 (AccessDeniedException):用户:arn: aws: iam::: user/ account-id <user-name>无权在资源上执行:ecr:: GetAuthorizationToken

如果您没有足够的权限访问 Amazon ECR 存储库,则在运行aws ecr get-login-password命令时可能会收到此错误。有关更多信息,请参阅亚马逊ECR用户指南中的亚马逊ECR存储ECR库策略示例和访问一个亚马逊存储库

错误:您已达到拉取率上限

Docker Hub 限制了匿名用户和 Free Docker Hub 用户可以发出的拉取请求的数量。如果您超过匿名或免费用户拉取请求速率限制,则会收到以下错误之一:

ERROR: toomanyrequests: Too Many Requests.
You have reached your pull rate limit.

要解决这些错误,您可以等待几个小时再尝试另一个拉取请求。如果您计划持续提交大量拉取请求,请访问 Docker Hub 网站,了解有关速率限制以及 Docker 账户身份验证和升级选项的信息。

Amazon IoT Greengrass 在 Docker 容器中进行调试

要调试 Docker 容器的问题,您可以保留 Greengrass 运行时日志或将交互式 shell 附加到 Docker 容器。

在 Docker 容器之外保留 Greengrass 日志

停止 Amazon IoT Greengrass 容器后,您可以使用以下docker cp 命令将 Greengrass 日志从 Docker 容器复制到临时日志目录。

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

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

要绑定挂载/greengrass/v2/logs目录,请在运行新的 D Amazon 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 日志 Amazon IoT Greengrass 。

有关运行 Greengrass Docker 容器的信息,请参阅 通过手动预置在 Docker 中运行 Amazon IoT Greengrass通过自动 Amazon IoT Greengrass 配置在 Docker 中运行

将交互式 Shell 附加到 Docker 容器

当您使用 docker exec 在 Docker 容器内运行命令时,这些命令不会被记录在 Docker 日志中。在 Docker 日志中记录命令可以帮助您调查 Greengrass Docker 容器的状态。请执行以下操作之一:

  • 在另一个终端中运行以下命令,将终端的标准输入、输出和错误附加至正在运行的容器。这样您就可以从当前终端查看和控制 Docker 容器。

    docker attach container-id
  • 在另一个终端运行以下命令。这样,即使没有连接容器,也可以在交互模式下运行命令。

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

有关一般 Amazon IoT Greengrass 故障排除,请参阅故障排除 Amazon IoT Greengrass V2