node.js - 在 Docker 容器中执行 shell 脚本时的 ENONENT
问题描述
我正在使用node:12-alpine
调用 ShellJSspawn
命令的 NodeJS 后端。它应该运行 shell 脚本,我已经验证并测试了它在本地工作。但是,它在 Docker 容器中运行时会显示此错误。
我还使用 docker exec 验证了该脚本是否存在于文件夹中。
我需要在 alpine 中进行配置才能使其正常工作吗?
这是 ShellJS 调用的命令:source execute.sh
Error: spawn /usr/src/app/scripts/execute.sh ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:267:19)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:273:12)
at onErrorNT (internal/child_process.js:469:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn /usr/src/app/scripts/execute.sh',
path: '/usr/src/app/scripts/execute.sh',
解决方案
如果你想在 alpine 中使用 shell 脚本,你必须安装一个名为bash
. 发生这种情况是因为 alpine 没有 bash。
Alpineash
作为默认 shell 而不是 bash。
这是在您的 alpine 映像中安装 bash 的示例。
Dockerfile
FROM alpine:latest
RUN apk add --update \
nodejs \
nodejs-npm \
bash && rm -rf /var/cache/apk/*
# ...
推荐阅读
- javascript - Javascript匿名函数表达式
- java - 当您有执行相同操作的侦听器时,为什么要使用像 @BeforeSuite 这样的 TestNG 注释?
- google-cloud-platform - 在自动伸缩组中挂载 SSD 磁盘
- google-app-engine - 如何获得一种财产的数量?
- makefile - Makefile 测试变量是否为空
- flutter - 在 Flutter 中将文本、图像或列表视图添加到脚手架
- python - 即使变量是全局分配的,python中的UnboundLocalError也是如此
- jmeter - Jmeter tps调整
- macos - MacOS:在 Gstreamer 1.14.2 框架中找不到标头
- c++ - 如何在 CRTP 实现中传递基类指针