node.js - 在 Kubernetes 下运行时,busybox/node.js 给出 ELF 语法错误
问题描述
我的 node.js kubernetes 开发服务器陷入崩溃循环。日志显示:
/bin/busybox:1
ELF
^
SyntaxError: Invalid or unexpected token
at wrapSafe (internal/modules/cjs/loader.js:992:16)
at Module._compile (internal/modules/cjs/loader.js:1040:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:941:32)
at Function.Module._load (internal/modules/cjs/loader.js:776:16)
at Function.executeUserEntryPoint [as runMain (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
stream closed
我找到了正在运行的图像kubectl describe
并在 shell 中运行它。它应该运行这个(来自Dockerfile
):
...
ENTRYPOINT ["node", "--max-old-space-size=4096", "--enable-source-maps"]
CMD ['node_modules/.bin/rollup','-cw']
所以在shell中我跑了:
❯ dsh myregistry/project/server:R4SUGQt
+dsh:1> docker run --rm -it --entrypoint sh myregistry/project/server:R4SUGQt -c '{ command -v zsh && exec zsh -il ;} || { command -v bash && bash -il ;} || { command -v ash && ash -il ;}'
/bin/ash
06884c20d5cc:/app# node --max-old-space-size=4096 --enable-source-maps node_modules/.bin/rollup -cw
而且效果很好。那么这个错误是从哪里来的呢?堆栈跟踪内部 ( internal/modules/...
) 中的所有路径都不是来自我的脚本或汇总。
我正在使用node:alpine
当前在 Node v14.11.0 上的基本映像。
直接运行
docker run --rm myregistry/project/server:R4SUGQ
确实重现了错误。
跑步
docker run -it myregistry/project/server:R4SUGQt node_modules/.bin/rollup -cw
工作正常...我的CMD
语法有问题吗?
CMD ['node_modules/.bin/rollup','-cw']
解决方案
这是我在CMD
.
事后发现这个reddit帖子:https ://www.reddit.com/r/docker/comments/9wn5gw/be_aware_of_the_quotes_in_your_dockerfile/
真是浪费时间......把这个问题留在这里以防其他人遇到类似的错误,也许这对他们来说是谷歌搜索。
推荐阅读
- laravel - laravel Route::resource 不能用于删除
- flutter - Flutter CustomScrollView 在没有足够项目时滚动
- pandas - 如何将数据帧(df)列的每个值的第一个数字提取到新数据帧(df1)
- powershell - 如何获取一个类的所有实例?
- jenkins - 如何根据管道参数值并行运行作业多次
- angular - *ngIf 条件进入无限循环
- python - 玩家碰撞检测
- android - 多行通知标题
- c# - tid 13929 (.AppTest.Project1) 中的致命信号 6 (SIGABRT),代码 -6 (SI_TKILL),pid 13929 (.AppTest.Project1)
- java - 如何发送终端命令