第一阶段中的二进制文件不会在第二阶段中拾取(Docker多阶段构建)

zqdjd7g9  于 2023-03-17  发布在  Docker
关注(0)|答案(1)|浏览(144)

有一个映像confluentinc/ksqldb-cli,我想使用库(https://github.com/wolfcw/libfaketime)进行扩充。
由于这个映像confluentinc/ksqldb-cli非常裸露,它不包含任何像aptapt这样的包管理器。
因此,我的想法是使用Docker多阶段构建。
第一种方法使用alpine映像构建库libfaketime
第二阶段将该库复制到confluentinc/ksqldb-cli映像。
在构建库之前,我想测试一下是否至少可以对git执行相同的操作:

FROM alpine:3.17.2

RUN apk update && apk add git

FROM confluentinc/ksqldb-cli:0.28.2

COPY --from=0 /usr/bin/git /bin/

ENTRYPOINT ["tail", "-f", "/dev/null"]

一旦我进入容器并输入:git,则得到:

/usr/bin/git: No such file or directory

但是,我可以在/bin中看到git,即使我看到cd /bin./git,我仍然得到:

bash: ./git: No such file or directory

如何将二进制文件从一个阶段复制到另一个阶段?
谢谢。

aiqt4smr

aiqt4smr1#

ksqldb映像基于Red Hat Enterprise Linux(Fedora),它使用dnf包管理器,你可以用它来安装git,如下所示:

FROM confluentinc/ksqldb-cli:0.28.2
USER root
RUN dnf install -y git
USER appuser
ENTRYPOINT ["tail", "-f", "/dev/null"]

映像被设置为在“appuser”用户下运行,因此在安装包时必须切换到root用户并返回。
使用软件包管理器安装比复制二进制文件要好得多。你不能只复制一个二进制文件,因为它可能依赖于你也需要复制的库的数量。这些库可能再次依赖于操作系统中包含的其他库。混合来自Alpine的库和来自Red Hat的库很可能不会起作用。

相关问题