在Alpine Docker中找不到/bin/bash命令

4

我尝试在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 执行所有操作。


我们需要更多的调试信息。您是如何确定make是否存在的?它是否具有执行权限?有时候bash会报告找不到某些东西,但实际上它无法运行它们。其他尝试的方法:which make; file /usr/bin/make(如果它在那里); updatedb; locate make - Ian Gibbs
@IanGibbs,请指出您认为有用于调试的内容。 :) - salient
关于 make 命令 - 我进入容器并逐个检查了所有命令。 - salient
哦,我移除了 SHELL 变量,现在它开始工作了。可能与 /bin/bash 有关。 - salient
很奇怪,因为它肯定存在于“/bin/”中。 - salient
显示剩余2条评论
3个回答

10

要使用Alpine软件包管理器(APK)添加bash,请使用以下命令:

apk update
apk add --no-cache bash

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

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

1
你可以将显式的 /bin/bash 更改为 $(which bash) - Bruno Wego
如果您想查看有关它的详细信息,请运行 getent passwd $USER - Bruno Wego
1
chsh:PAM:身份验证令牌操作错误。 - Mike Macpherson
什么是阴影? - Vignesh S

7

使用名为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中不存在/bin/bash:

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

请注意,这里没有makego。因此,要么你在主机上检查它们的存在而不是在Alpine上,要么你没有使用原始的Alpine系统。

好的,我已经使用 apk add --no-cache bash 命令来进行特定安装。 - salient
好的,我猜你也安装了makego。那么它应该可以工作。由于make似乎已经存在,所以这不是使用错误容器的问题。你确定你按正确顺序执行了所有步骤吗? - Renaud Pacalet
顺便问一下,你展示的 Makefile 真的是你正在使用的吗?SHELL := /bin/bash 行末没有注释吗? - Renaud Pacalet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接