gpt4 book ai didi

docker - ADD 和 COPY 将目录的内容与构建中已有的内容合并

转载 作者:行者123 更新时间:2023-12-02 09:12:48 27 4
gpt4 key购买 nike

我正在尝试使用与我的 dockerfile 一起存储的一些文件来组装图像。我对 COPY 或 ADD 的期望是合并行为。但是,如果我使用这些说明,文件层次结构将被覆盖。因此,如果父镜像中的文件位于路径内,则它们不再可用。 (例如,如果我要在/etc/mycoolstuff/filehere 上保存一些文件,那就是一个巨大的问题)

发生这种情况时,我无法再使用 apt-get

我还看到了一些将我的文件转换为 tar 打包的建议,但没有观察到任何不同。

为了清楚起见,这是问题之一(如果我更改顺序,则会构建,但无论如何它都会损坏,导致子图像将无法再使用 apt):

ADD     build/image-base.tgz /
RUN apt-get clean -y && \
apt-get update && \
apt-get install unzip -y --no-install-recommends && \
apt-get install gosu -y --no-install-recommends && \
apt-get clean -y && \
apt-get autoclean -y && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*

Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease Temporary failure resolving 'archive.ubuntu.com'
Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease Temporary failure resolving 'archive.ubuntu.com'
Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease Temporary failure resolving 'archive.ubuntu.com'
Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease Temporary failure resolving 'security.ubuntu.com'
Failed to fetch http://ppa.launchpad.net/webupd8team/java/ubuntu/dists/xenial/InRelease
Temporary failure resolving 'ppa.launchpad.net'
Some index files failed to download. They have been ignored, or old ones used instead.

最佳答案

经过一番挖掘,我找到了一种使用 COPY 和 RUN 的解决方法来实现我正在寻找的行为。

COPY    build/image-base.tgz /

RUN tar -xvf image-base.tgz --no-overwrite-dir

不幸的是,这会创建一个新层,并且基础 tar 将保留在那里。如果只是一些文本配置文件,这不是一个小问题。

绕过 COPY 指令的一个奇怪方法是使用 wget,然后解压,这样我们就可以删除 tar 文件。如果我们在一个存储工件并为它们创建 URL 的构建环境中,wget 就可以解决问题……在这种情况下,我们只需要一次 RUN,保持内部干净。

关于docker - ADD 和 COPY 将目录的内容与构建中已有的内容合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44529896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com