Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?
Posted
技术标签:
【中文标题】Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?【英文标题】:Docker: How to use bash with an Alpine based docker image? 【发布时间】:2017-04-18 02:07:31 【问题描述】:我从 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
【问题讨论】:
谷歌员工:docker run --rm -i -t alpine /bin/sh
启动容器(交互方式):docker exec -it container_id /bin/sh
【参考方案1】:
Alpine docker 镜像默认没有安装 bash。您需要添加以下命令来获取bash
:
RUN apk update && apk add bash
如果您使用的是Alpine 3.3+
,那么您可以这样做:
RUN apk add --no-cache bash
保持 docker 图像尺寸较小。 (感谢@sprkysnrky 的评论)
【讨论】:
apk upgrade
不是必需的。
我更喜欢使用@Yuva 的推荐,使用RUN /bin/sh
而不是RUN bin/bash
这完全取决于你,很多人需要bash
特定功能。
我为什么要使用--no-cache
选项?【参考方案2】:
尝试使用RUN /bin/sh
代替 bash。
【讨论】:
OP 要求 bash。 sh 不是 bash。 但无论如何,这是非常有用的评论 - 大多数人都可以使用 sh - 而且它不需要额外 50mb 的图像大小 简单明了。大多数时候我们只需要运行糟糕的命令(ls、ps 等等),sh 涵盖了这些场景。谢谢! @kboombash
包的大小比alpine:3.8
增加了大约 4MB,大约翻了一番,但距离 50MB 还很远。
这应该是评论而不是答案。同时,我同意接受的答案应该包含一条评论,如果可能的话,应该坚持使用sh
,而不是安装bash
,因为它会增加图像的大小。【参考方案3】:
RUN /bin/sh -c "apk add --no-cache bash"
为我工作。
【讨论】:
RUN 命令的开头部分是不必要的。你可以直接写RUN apk add --no-cache bash
【参考方案4】:
要安装 bash,你可以这样做:
RUN apk add --update bash && rm -rf /var/cache/apk/*
如果您不想为图像添加额外尺寸,可以使用 alpine 附带的 ash
或 sh
。
参考:https://github.com/smebberson/docker-alpine/issues/43
【讨论】:
以上是关于Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
干货~powershell与bash和docker在项目中怎么用
如何通过 docker 将 API 与 Web SPA 连接起来
如何在没有注销/登录的情况下将用户添加到组 - Bash 脚本