/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
。