【问题标题】:Docker: How to use bash with an Alpine based docker image?Docker:如何将 bash 与基于 Alpine 的 docker 映像一起使用?
【发布时间】: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

标签: bash docker dockerfile alpine


【解决方案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 涵盖了这些场景。谢谢!
  • @kboom bash 包的大小比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 附带的 ashsh

参考:https://github.com/smebberson/docker-alpine/issues/43

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2018-07-13
    • 2022-11-11
    • 2017-11-30
    相关资源
    最近更新 更多