对 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 容器中调试 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 目录后运行
Docker 容器。
/logs/greengrass/v2
要绑定挂载
目录,请在运行新的 AWS IoT Greengrass Docker 容器时执行以下任一操作。
/logs/greengrass/v2
-
将
-v
包括在您的/tmp/logs
:
/logs:ro/greengrass/v2
docker run
命令中。在运行
docker-compose up
命令之前,修改 Compose 文件中的volumes
块以包含以下行。volumes: -
/tmp/logs
:
/logs:ro/greengrass/v2
然后,您可以在主机上的
中检查日志,查看 AWS IoT Greengrass 在 Docker 容器内运行时的 Greengrass 日志。/tmp/logs
有关运行 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。