【发布时间】: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