我目前正在使用第三方Docker映像,其Dockerfile基于空映像,从FROM scratch
指令开始。
如何在此类映像上安装Bash?我尝试向Dockerfile添加一些额外的命令,但是显然RUN
指令本身需要Bash。
答案 0 :(得分:0)
启动Docker映像FROM scratch
时,您什么也没得到。通常,使用这些方法之一的方法是在主机上构建静态二进制文件(或者在最近的Dockerfile构建阶段构建这些二进制文件),然后COPY
将其插入映像。
FROM scratch
COPY mybinary /
ENTRYPOINT ["/mybinary"]
没有什么可以阻止您创建派生图像并将{bins}附加到其中。您必须专门构建静态二进制文件或安装完整的动态库环境。
如果您要尝试调试容器,则映像中可能没有其他内容。这意味着一件事,就是您可以使用Shell进行的一系列操作非常无聊。另一个是您将不会拥有习惯的标准工具集(没有COPY
或ls
)。如果您可以不使用bash的各种扩展程序而生活,BusyBox是一个小型工具,旨在静态地构建和安装在有限的环境中,其中提供了大多数标准工具的最低版本。
答案 1 :(得分:0)
这个问题很旧,但我看到了一个类似的问题,来到这里,所以在下面发布以处理这种情况。
我目前正在使用第三方Docker映像, Dockerfile基于空映像,从FROM头开始 指令。
正如@David所提到的,这种图像中没有任何基于刮擦的图像,如果图像基于刮擦图像,则只需将二进制文件复制到图像即可。
因此,使用此类映像的方法是将二进制文件复制到扩展映像中,并在所需的docker映像中使用它们。
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"]