Docker:如何将bash与基于Alpine的Docker图像一起使用?

Docker:如何将bash与基于Alpine的Docker图像一起使用?,bash,docker,dockerfile,alpine,Bash,Docker,Dockerfile,Alpine,我从openjdk:8-jdk-alpine创建了一个docker映像,但当我尝试执行简单命令时,会出现以下错误: RUN bash /bin/sh: bash: not found RUN ./gradlew build env: can't execute 'bash': No such file or directory 默认情况下,Alpine docker映像没有安装bash。您需要添加以下命令才能获取bash: RUN apk update && apk add

我从openjdk:8-jdk-alpine创建了一个docker映像,但当我尝试执行简单命令时,会出现以下错误:

RUN bash
/bin/sh: bash: not found

RUN ./gradlew build
env: can't execute 'bash': No such file or directory

默认情况下,Alpine docker映像没有安装bash。您需要添加以下命令才能获取
bash

RUN apk update && apk add bash
如果您使用的是阿尔卑斯山3.3+,那么您可以

RUN apk add --no-cache bash

使docker图像的大小保持较小。(感谢@sprkysnrky的评论)

尝试使用
RUN/bin/sh
而不是bash

RUN /bin/sh -c "apk add --no-cache bash"

为我工作。

要安装bash,您可以执行以下操作:

RUN apk add --update bash && rm -rf /var/cache/apk/*
如果您不想在图像中添加额外尺寸,可以使用alpine附带的
ash
sh


参考资料:

不需要升级
apk
。我更喜欢使用@Yuva的建议,使用
RUN/bin/sh
,而不是
RUN-bin/bash
,这完全取决于您,许多人需要
bash
特定功能。OP要求bash。sh不是bash,但无论如何,这是一个非常有用的评论——大多数人都可以使用sh——而且它不需要额外的50mb图像大小——简单明了。大多数情况下,我们只需要运行糟糕的命令(ls、ps等等),sh涵盖了这些场景。谢谢我也在找bash,但sh做得很好!谢谢@kboom的
bash
包将
alpine:3.8
的大小增加了约4MB,大约是原来的两倍,但距离50MB还差得远。对于谷歌用户来说:
docker run--rm-i-t alpine/bin/sh
启动容器(交互):docker exec-it container\u id/bin/sh运行命令的初始部分是不必要的。您可以直接编写
运行apk add--no cache bash