在临时Docker映像上安装Bash

时间:2018-08-24 09:12:27

标签: docker dockerfile

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

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

2 个答案:

答案 0 :(得分:0)

启动Docker映像FROM scratch时,您什么也没得到。通常,使用这些方法之一的方法是在主机上构建静态二进制文件(或者在最近的Dockerfile构建阶段构建这些二进制文件),然后COPY将其插入映像。

FROM scratch
COPY mybinary /
ENTRYPOINT ["/mybinary"]

没有什么可以阻止您创建派生图像并将{bins}附加到其中。您必须专门构建静态二进制文件或安装完整的动态库环境。

如果您要尝试调试容器,则映像中可能没有其他内容。这意味着一件事,就是您可以使用Shell进行的一系列操作非常无聊。另一个是您将不会拥有习惯的标准工具集(没有COPYls)。如果您可以不使用bash的各种扩展程序而生活,BusyBox是一个小型工具,旨在静态地构建和安装在有限的环境中,其中提供了大多数标准工具的最低版本。

答案 1 :(得分:0)

这个问题很旧,但我看到了一个类似的问题,来到这里,所以在下面发布以处理这种情况。

  

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

正如@David所提到的,这种图像中没有任何基于刮擦的图像,如果图像基于刮擦图像,则只需将二进制文件复制到图像即可。

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

例如postgres_exporter

FROM scratch
ARG binary
COPY $binary /postgres_exporter
EXPOSE 9187
ENTRYPOINT [ "/postgres_exporter" ]

所以这是从头开始的,我无法安装bash或其他任何可以复制二进制文件来运行的东西。

这是工作,将它们用作多阶段基础映像,将二进制文件和已安装的软件包复制到Docker映像中。

下面我们需要添加“等待”

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"]