/bin/bash:在alpine docker中找不到命令

/bin/bash:在alpine docker中找不到命令,bash,docker,jenkins,makefile,alpine,Bash,Docker,Jenkins,Makefile,Alpine,我正试图在一个alpinedocker中运行这个Makefile SHELL := /bin/bash build: GOOS=linux go build -o bin/server main.go 我已经通过交互式地进入容器并检查所有命令,确定了bash、make、go都在那里 但这一命令神秘地失败了: + make build make: /bin/bash: Command not found GOOS=linux go build -o bin/server main.go

我正试图在一个
alpine
docker中运行这个
Makefile

SHELL := /bin/bash

build:
    GOOS=linux go build -o bin/server main.go
我已经通过交互式地进入容器并检查所有命令,确定了
bash
make
go
都在那里

但这一命令神秘地失败了:

+ 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

在alpine中没有
/bin/bash

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

请注意,没有
make
go
两个选项。因此,要么您在主机中而不是在alpine中检查它们的存在,要么您没有使用vanilla alpine。

使用名为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

要使用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

我们需要更多的调试信息。你是如何确定那是什么牌子的?它有执行权限吗?有时,bash会报告在那里找不到的东西,但它无法运行它们。其他要尝试的东西:
使
<代码>文件/usr/bin/make(如果在那里)<代码>更新的b;找到make@IanGibbs do,告诉我你认为对调试有用的东西。:)至于make-我走进容器,一个接一个地检查了所有的命令。如果你自己运行make命令(即不是通过jenkins),它可以工作吗?我应该这么想。哦,我删除了
SHELL
-变量,现在它开始工作了。可能与
/bin/bash
有关。好吧,我专门用
apk add安装了它——没有缓存bash
很好。我猜你也安装了
make
go
。那么,它应该会起作用。由于
make
似乎存在,这不是使用错误容器的问题。你确定按正确的顺序执行了所有步骤吗?顺便问一下,你显示的Makefile就是你正在使用的那个吗?在
SHELL:=/bin/bash
行的末尾没有注释?您可以将显式
/bin/bash
更改为
$(哪个bash)
。如果希望查看有关它的详细信息,请运行
getent passwd$USER