【问题标题】:Docker image fails to run on Raspberry Pi with strange Node errorDocker 映像无法在 Raspberry Pi 上运行,出现奇怪的节点错误
【发布时间】:2022-01-23 22:32:03
【问题描述】:

我一直在做一个项目,我通过 docker 将它部署到我家的树莓派上。在这一点上,我可能对流程进行了大约 10 次更新,所以我已经成功地在我的 RBP 上的 docker 上运行了我的项目。

管道是我将我的代码推送到 Github,然后一个 github 操作/工作流构建并将图像推送到 Docker Hub。然后我手动 SSH 到我的 Raspberry Pi,从 Docker Hub 拉取镜像,然后运行它。

一切正常,直到我对图像中运行的节点应用程序进行了一些更改。当我在 Raspberry Pi 上拉取并运行映像时,我收到一个奇怪的节点错误......关于以微秒为单位获取时间的东西?

Node.js[1]: ../src/util.cc:188:double node::GetCurrentTimeInMicroseconds(): Assertion `(0) == (uv_gettimeofday(&tv))' failed.

请注意,我没有对部署管道或流程进行任何更改。我也没有更改 Dockerfile 中的任何内容。 “重大更改”本质上只是在 Node 应用程序中重新安排了一些快速路由,我已将其取消并重新部署到 Docker,但仍然出现上述错误。

更奇怪的是,图像在我的 Macbook 上运行良好。查看两个终端的图像,一个通过 ssh 进入 RBP,一个在我的 Macbook 上。您可以看到我正在从 dockerhub 中提取相同的图像并在每台机器上运行它,结果却截然不同。 Macbook 终端甚至显示错误,因为我已使用 buildx 编译图像以在 arm 架构上运行......但它仍然运行我的代码。

我已经用几种不同的方式搜索了节点错误,但我没有找到任何东西。我基本上不知道发生了什么,它完全阻止了我的进步。我尝试更新 Pi 本身,将其关闭/打开,卸载/重新安装 docker,删除所有 docker 映像(您可以在 RBP 终端中看到 docker image ls 作为命令),然后重新推送我的代码以触发另一个映像构建。

任何想法将不胜感激!甚至只是如何在 docker 映像启动时获取更详细的日志。正如您在下面的 RBP 终端中看到的那样,它显示了一个错误并退出。

【问题讨论】:

  • 我知道这不是您期望的答案,但请尝试在新的 microsd 安装中运行您的容器。我不知道为什么,但有时像这样的问题发生在我身上,并且在安装新的 raspibian 后一切正常。
  • Node 似乎无法获得有效时间。您使用什么作为 Docker 映像的基础映像?图像是否安装了 libuv?您还可以尝试使用strace 来检查幕后发生的系统调用。
  • 我会尝试安装新的 raspbian,感谢@guilfer 的建议!而且我只是使用节点作为基础映像(FROM node),我不知道 libuv。我没有使用过 strace(对 docker 来说非常新),但我会做一些研究并尝试获得更好的日志记录。
  • 我相信我已经通过将基础 docker 映像更改为 node:14-alpine 解决了这个问题。不知道为什么这会解决它,但对于任何发现此问题的人来说,值得一试!
  • 我刚刚发现这张图片不可靠。当我朝着另一个方向前进时,我没有寻求解决方案

标签: node.js docker raspberry-pi


【解决方案1】:

您是否尝试过使用参数 --security-opt seccomp:unconfined 运行 docker 容器?

我在 Raspberry Pi 上收到了同样的错误消息。每次我在我能找到的任何节点图像上运行节点或 npm 时都会触发它。当我试图深入研究为什么 uv_gettimeofday(&tv) 会在容器内失败时,我注意到 apt update 已损坏,如下所述:

https://askubuntu.com/questions/1263284/apt-update-throws-signature-error-in-ubuntu-20-04-container-on-arm

该问题的解决方案,在运行 docker 容器时应用 --security-opt seccomp:unconfined,不仅解决了我的 apt 问题,还解决了我的节点和 npm 问题。

至于 seccomp 设置会影响 uv_gettimeofday 的根本原因,我不知道。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多