在 Docker 容器中执行 shell 脚本时 ENONENT

ENONENT when executing shell script in Docker container

我正在使用 node:12-alpine 和 NodeJS 后端调用 ShellJS spawn 命令。它应该 运行 shell 脚本,我已经验证和测试它在本地工作。但是,当它在 Docker 容器中 运行ning 时显示此错误。

我还使用 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 的软件包。发生这种情况是因为高山没有 bash.

Alpine 默认带有 ash shell 而不是 bash。

这里是在你的 alpine 镜像中安装 bash 的例子。

Dockerfile

FROM alpine:latest
RUN apk add --update \
nodejs \
nodejs-npm \
bash && rm -rf /var/cache/apk/*
# ...