对 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 版本(例如,运行:pip install awscli --upgrade --user)。有关更多信息,请参阅Amazon Command Line Interface用户指南中的在 Microsoft Windows 上安装 Amazon Command Line Interface

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

在 Windows 计算机上运行 Docker 时,你可能会收到此错误或一条Firewall Detected消息。如果您登录虚拟私有网络 (VPN) 并且网络设置阻止挂载共享驱动器,也会出现此错误。在这种情况下,请关闭 VPN 并重新运行 Docker 容器。

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

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

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

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

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

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

在 Docker 容器中调试 Amazon IoT Greengrass

要调试 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 容器的信息,请参阅和 使用手动Amazon IoT Greengrass配置在 Docker 中运行 通过自动 Amazon IoT Greengrass 配置在 Docker 中运行

将交互式外壳附加到 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