【问题标题】:Docker cannot find module /bin/bashDocker 找不到模块 /bin/bash
【发布时间】:2020-12-19 07:02:14
【问题描述】:

我正在尝试为 nodejs Web 后端构建一个 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,我不知道这是否是一个因素。

【问题讨论】:

    标签: node.js docker alpine


    【解决方案1】:

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

    RUN apk update && apk add bash
    

    How to use bash with an Alpine based docker image?

    【讨论】:

      【解决方案2】:

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

      尝试使用不那么纤细的图片。

      【讨论】:

        【解决方案3】:

        就像其他答案所说,您需要先安装 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>
        

        【讨论】:

          猜你喜欢
          • 2016-02-13
          • 2018-02-02
          • 1970-01-01
          • 2020-06-30
          • 2019-01-14
          • 2017-03-15
          • 2020-04-08
          • 1970-01-01
          相关资源
          最近更新 更多