我一直在开发一个项目,通过 docker 将其部署到我家的树莓派上。此时,我可能对该流程进行了约 10 次更新,因此我已经在 RBP 上的 docker 上成功运行了我的项目。
管道是我将代码推送到 Github,然后 github 操作/工作流构建镜像并将其推送到 Docker Hub。然后我手动通过 SSH 连接到 Raspberry Pi,从 Docker Hub 中提取映像,然后运行它。
一切都工作正常,直到我对图像内运行的节点应用程序进行了一些更改。当我在 Raspberry Pi 上拉取并运行图像时,我收到一个奇怪的 Node 错误......关于获取以微秒为单位的时间?
Node.js[1]: ../src/util.cc:188:double node::GetCurrentTimeInMicroseconds(): Assertion `(0) == (uv_gettimeofday(&tv))' failed.
请注意,我没有对部署管道或流程进行任何更改。我也没有改变 Dockerifle 中的任何内容。“重大更改”本质上只是在 Node 应用程序中重新安排一些快速路由,我已取消这些路由并将其重新部署到 Docker,但仍然出现上述错误。
更奇怪的是,该图像在我的 Macbook 上运行完全正常。查看两个终端的图像,一个通过 ssh 连接到 RBP,另一个在我的 Macbook 上。您可以看到我从 dockerhub 中提取相同的映像并在每台机器上运行它,但结果却截然不同。Macbook 终端甚至显示错误,因为我已经编译了图像以在架构buildx上运行arm......但它仍然运行我的代码。
我已经用几种不同的方式搜索了节点错误,但我没有找到任何东西。我基本上不知道发生了什么,它完全阻止了我的进步。我尝试过更新 Pi 本身,将其关闭/打开,卸载/重新安装 docker,删除所有 docker 映像(您可以docker image ls在 RBP 终端中看到命令),然后重新推送我的代码以触发另一个映像构建。
任何想法将不胜感激!甚至只是如何在 docker 镜像启动时获取更详细的日志。正如您在下面的 RBP 终端中看到的,它显示一个错误并退出。