首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装Bash on scratch Docker镜像

安装Bash on scratch Docker镜像
EN

Stack Overflow用户
提问于 2018-08-24 17:12:27
回答 2查看 5.9K关注 0票数 3

我目前正在使用第三方Docker镜像,它的Dockerfile基于空镜像,从FROM scratch指令开始。

如何在这样的镜像上安装Bash?我尝试向Dockerfile中添加一些额外的命令,但显然RUN指令本身需要Bash。

EN

回答 2

Stack Overflow用户

发布于 2018-08-24 19:17:57

当你启动一个Docker镜像FROM scratch时,你什么都得不到。通常,您使用其中之一的方式是在您的主机上构建一个静态二进制文件(或者现在在早期Dockerfile构建阶段),然后将其COPY到镜像中。

代码语言:javascript
复制
FROM scratch
COPY mybinary /
ENTRYPOINT ["/mybinary"]

没有什么能阻止你创建一个派生镜像并将额外的二进制文件COPY到其中。要么你必须专门构建一个静态二进制文件,要么安装一个完整的动态库环境。

如果您这样做是为了尝试调试容器,则映像中可能没有其他内容。这意味着你可以用shell做的一系列事情都很无聊。另一个原因是你将不会拥有你所习惯的标准工具集(没有lscp)。如果您可以不使用bash的各种扩展,那么BusyBox是一个小型工具,可以在有限的环境中静态构建和安装,它提供了大多数标准工具的最小版本。

票数 1
EN

Stack Overflow用户

发布于 2019-10-04 13:22:26

这个问题是旧的,但我看到了类似的问题,并来到这里,所以在下面张贴来处理这种情况。

我目前正在使用第三方Docker镜像,它的Dockerfile基于空镜像,从scratch指令开始。

正如@David提到的那样,这种镜像中没有基于scratch的东西,如果镜像是基于scratch镜像的,他们只是将二进制文件复制到镜像中,仅此而已。

因此,使用这类镜像的技巧是将二进制文件复制到扩展镜像中,并在所需的docker镜像中使用它们。

例如postgres_exporter

代码语言:javascript
复制
FROM scratch
ARG binary
COPY $binary /postgres_exporter
EXPOSE 9187
ENTRYPOINT [ "/postgres_exporter" ]

所以这是基于scratch的,我不能安装bash或其他任何东西,我只能复制二进制文件来运行。

所以这里的工作是,使用它们作为多阶段基础镜像,复制二进制文件和已安装的包到您的docker镜像中。

下面我们需要添加wait-for-it

代码语言:javascript
复制
FROM wrouesnel/postgres_exporter 
# use the above base image
FROM debian:7.11-slim
RUN useradd -u 20001 postgres_exporter
USER postgres_exporter
#copy binires 
COPY --from=0 /postgres_exporter /postgres_exporter
EXPOSE 9187
COPY wait-for-it.sh wait-for-it.sh
USER root
RUN chmod +x wait-for-it.sh
USER postgres_exporter
RUN pwd
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./postgres_exporter"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52001121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档