【问题标题】:/bin/bash: Command not found in alpine docker/bin/bash:在 alpine docker 中找不到命令
【发布时间】:2018-02-02 06:53:26
【问题描述】:

我正在尝试在 alpine docker 中运行此 Makefile

SHELL := /bin/bash

build:
    GOOS=linux go build -o bin/server main.go

通过交互进入容器并检查所有命令,我确定bashmakego 都在那里。

但是这个命令神秘地失败了:

+ make build
make: /bin/bash: Command not found
GOOS=linux go build -o bin/server main.go
make: /bin/bash: Command not found
make: *** [Makefile:17: build] Error 127
script returned exit code 2

我很难调试它,因为它在一个 docker 中,它是 jenkins 正在执行所有内容。

【问题讨论】:

  • 我们需要更多的调试信息。你是怎么确定那个牌子的?它有执行权限吗?有时 bash 会报告在它们存在时未找到但无法运行它们的东西。其他尝试:which make; file /usr/bin/make(如果是这样的话); updatedb; locate make
  • @IanGibbs 确实向我指出了您认为对调试有用的东西。 :)
  • 至于make——我进入容器,一一检查所有命令
  • 另外,如果您自己运行 make 命令(即不通过 jenkins),它是否可以正常工作?我应该是这样想的。
  • 哦,我删除了SHELL-变量,现在它开始工作了。那么可能与/bin/bash有关。

标签: bash docker jenkins makefile alpine


【解决方案1】:

alpine 中没有/bin/bash

$ docker run -i -t alpine
/ # ls /bin/bash
ls: /bin/bash: No such file or directory

请注意,没有makego 也没有。所以,要么你在你的主机而不是在 alpine 中检查了它们的存在,要么你没有使用 vanilla alpine。

【讨论】:

  • 好的,我专门用apk add --no-cache bash安装的
  • 很好。我猜你也安装了makego。那么它应该可以工作。正如make 似乎在那里,这不是使用错误容器的问题。您确定您按正确的顺序执行了所有步骤吗?
  • 顺便问一下,你展示的 Makefile 真的是你使用的那个吗? SHELL := /bin/bash 行末尾没有评论?
【解决方案2】:

以这种方式使用名为 apk 的包管理器:

% docker run --rm -it alpine /bin/sh
/ #
/ # apk add --no-cache bash
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ncurses-terminfo-base (6.0-r8)
(2/5) Installing ncurses-terminfo (6.0-r8)
(3/5) Installing ncurses-libs (6.0-r8)
(4/5) Installing readline (6.3.008-r4)
(5/5) Installing bash (4.3.46-r5)
Executing bash-4.3.46-r5.post-install
Executing busybox-1.25.1-r0.trigger
OK: 12 MiB in 16 packages
/ # which -a bash
/bin/bash

【讨论】:

    【解决方案3】:

    要使用 Alpine Package Keeper (APK) 添加bash,请使用以下命令:

    apk update
    apk add --no-cache bash
    

    不要忘记将bash 设置为默认shell:

    apk add --no-cache shadow
    chsh -s /bin/bash
    exec /bin/bash
    

    【讨论】:

    • 您可以将显式/bin/bash 更改为$(which bash)
    • 如果您想查看它的详细信息,请运行getent passwd $USER
    • chsh: PAM: 身份验证令牌操作错误
    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2017-03-08
    • 1970-01-01
    • 2018-11-13
    • 2020-12-19
    相关资源
    最近更新 更多