gpt4 book ai didi

build - 文件; docker 构建卷 : changes to volume via ADD or COPY are not discarded

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

我有一个类似这样的 dockerfile:

VOLUME /tmp/space
ADD local/directory/ /tmp/space/
RUN cp /tmp/space/somescript.sh /opt/real/space/

构建容器并获得交互式 shell 后,我注意到/tmp/space 仍然包含本地/目录中的数据。

如果我将 RUN rm -rf/tmp/space/* 添加到 dockerfile 的末尾并获得 shell 访问权限。数据仍然在/tmp/space/中。

因此,我只能使用相同的卷制作一个正在运行的容器,然后将更改后的容器提交到更新后的图像。

有没有一种方法可以在构建过程中临时加载一个不会使生成的图像膨胀的卷?

目标是使用源文件和脚本在构建过程中执行一些操作。 docker 层最终记录了 COPY/ADD 步骤和 RUN 步骤的副本。因此,最好将数据COPY 到一个未记录为层的空间,然后作为单个RUN 步骤cp stuff && execute scripts 以节省空间。

最佳答案

我不确定你想在这里做什么:VOLUME/tmp/space - 这声明了一个挂载点并将容器上的/tmp/space 映射到主机上的目录

ADD/local/directory/tmp/space - 我认为您正试图将本地目录从您的容器复制到您的挂载卷

RUN cp/tmp/space/*/opt/real/space/- 您是否正在尝试从您的卷复制到您的主机?

在 dockerfile 中添加 VOLUME 指令后,容器 /tmp/space 中的文件夹被映射到主机上的文件夹,比如 /hosttmp/hostspace 。您可以通过运行命令来找出主机上的内容 -

$ docker inspect -f {{.Volumes}} <your_container_name>

为了防止 /hosttmp/hostspace 中的数据损坏,一旦在 dockerfile 中声明了一个 VOLUME,您就不能随意修改其中的内容。

我建议阅读这篇文章,因为它解释了相当困惑的 docker volume 概念

http://container-solutions.com/understanding-volumes-docker/

关于build - 文件; docker 构建卷 : changes to volume via ADD or COPY are not discarded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880181/

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