首页 > 解决方案 > 在 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',

标签: node.jsdockershelljs

解决方案


如果你想在 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/*
# ...

推荐阅读