对 Docker 容器中的 AWS IoT Greengrass 执行问题排查 - AWS IoT Greengrass

对 Docker 容器中的 AWS IoT Greengrass 执行问题排查

使用以下信息可帮助解决与在 Docker 容器中运行 AWS IoT Greengrass 相关的问题,并调试 Docker 容器中的 AWS IoT Greengrass。

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

使用以下信息可帮助解决与在 Docker 容器中运行 AWS IoT Greengrass 相关的问题。

错误:无法从非 TTY 设备执行交互式登录

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

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

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

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

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

错误: 调用 GetAuthorizationToken 操作时发生错误 (AccessDeniedException): 用户 arn:aws:iam::account-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 容器中调试 AWS IoT Greengrass

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

在 Docker 容器之外保留 Greengrass 日志

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

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

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

要绑定挂载 /greengrass/v2/logs 目录,请在运行新的 AWS IoT Greengrass Docker 容器时执行以下任一操作。

  • -v /tmp/logs:/greengrass/v2/logs:ro 包括在您的 docker run 命令中。

    在运行 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通过自动预置在 Docker 中运行 AWS IoT Greengrass

将交互式 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"

对于一般 AWS IoT Greengrass 故障排除,请参阅 故障排除 AWS IoT Greengrass V2