对 Docker 容器中的 AWS IoT Greengrass 问题排查 - AWS IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

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

对运行 Docker 容器的问题进行故障排除

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

Error: 无法从非 TTY 设备执行交互式登录。

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

Error: 未知选项:-不含电子邮件。

运行时,可能会出现此错误。aws ecr get-login命令。确保您安装了最新的 AWS CLI 版本(例如,运行以下内容:pip install awscli --upgrade --user)。有关更多信息,请参阅 。在微软 Windows 上安装 AWS 命令行接口中的AWS 命令行界面用户指南

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

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

Error: An error error (AccessException) 在调用 GreenException 操作时发生错误 (AccessException): 用户:arn: aws: iam። iam።account-id:用户/<user-name> 未授权执行:ECR:数据化资源上的令牌:*

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

在 Docker 容器中调试 AWS IoT Greengrass

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

将 Greengrass 日志保留到 Docker 容器之外

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

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

要保留日志,即使在容器退出或被删除后,您必须在绑定装载/greengrass/v2/logs目录。

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

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

    修改volumes块,以包含以下行,然后再运行docker-compose up命令。

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

然后,您可以在/tmp/logs,以查看 Greengrass 在 Docker 容器内运行时 AWS IoT 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 常规故障排除,请参阅Troubleshooting