Docker 找不到模块 /bin/bash

Docker cannot find module /bin/bash

我正在尝试为 nodejs 网络后端构建 docker 图像,目前看起来像这样:

FROM node:10-alpine

WORKDIR /usr/src/smart-brain-api

COPY ./ ./

RUN npm install

CMD ["/bin/bash"]

当我在构建图像后执行 docker run -it 时,出现了这个奇怪的错误

internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module '/bin/bash'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

但是,如果我编辑 docker 文件并将 CMD ["/bin/bash"] 更改为 CMD ["/bin/sh"] 一切正常

我正在使用 macbook air 13,我不知道这是否是一个因素。

alpine 图片没有 bash 开箱即用。需要单独安装。

RUN apk update && apk add bash

您可以在您的工作容器中尝试 which bash,但此容器映像中很可能没有 Bash。

尝试使用不太苗条的图像。

就像其他答案所说的那样,您需要先安装 bash,因为 alpine 没有安装 bash。您需要安装它:

RUN apk update && apk add bash

然后你可以在你的 dockerfile

中使用这一行将默认的 shell 从 sh 切换到 bash
SHELL ["/bin/bash", "-c"]

dockerfile 应该看起来像这样

FROM node:10-alpine
RUN apk update && apk add bash
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
CMD bash # If you want to override CMD

然后你可以用这条线启动你的容器

docker run -it --rm <image-name> bash

或者如果您已经覆盖了 CMD,您可以简单地执行

docker run -it --rm <image-name>