gpt4 book ai didi

Docker run --mount 在运行期间使所有文件在不同的文件夹中可用

转载 作者:行者123 更新时间:2023-12-02 20:35:53 26 4
gpt4 key购买 nike

我想让我的主机上的文件夹在 RUN 期间可用陈述。即类似于容器运行的效果 -v :

docker run -v /path/on/host:/path/in/container mycontainer:tag

在容器中,这给了我 /path/in/container包含 path/on/host 中的所有文件/文件夹.

为此,我正在尝试来自 https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md 的实验性安装选项:
RUN --mount=type=bind,target=/path/on/host

这给了我一个文件夹 /path/on/host期间 RUN .

然后我有两个问题:
  • 我可以ls里面的文件 /path/on/host ,但不要使用它们(例如 cat 它们)。我试过改变 type例如cache并使用 source喜欢在 https://devops.stackexchange.com/questions/6078/in-a-dockerfile-is-there-a-way-to-avoid-copying-files-to-make-them-accessible-t ,但我无法让它工作。
  • 我无法弄清楚如何在“RUN 图像”中使用不同的路径,即 /path/in/container而不是 /path/on/host .
  • 最佳答案

    我想你误解了什么RUN --mount=type=bind...语法是为了。从文档:

    This mount type allows binding directories (read-only) in the context or in an image to the build container.



    换句话说,这不允许您在构建阶段访问任意主机目录。它不是 -v 的类比 docker run 上的命令行选项| .它只允许您:
  • 从构建上下文挂载目录,或
  • 在多阶段构建中从另一个阶段挂载目录

  • 例如,我可以这样做,将目录从一个构建阶段挂载到后续构建阶段:
    # syntax=docker/dockerfile:experimental

    FROM centos AS centos

    FROM alpine
    RUN --mount=type=bind,from=centos,source=/,target=/centos ls /centos > /root/centos.txt

    或者,如果我有一个名为 example 的目录在我的构建上下文中,我可以这样做以在构建过程中安装它:
    # syntax=docker/dockerfile:experimental

    FROM centos AS centos

    FROM alpine
    RUN --mount=type=bind,source=example,target=/data cp /data/* /root/

    您使用的语法(未指定 from)...
    RUN --mount=type=bind,target=/path/on/host

    ...简单地将构建上下文的根安装在 /path/on/host 上容器内。请记住 target指定容器内的挂载点。例如,如果我的构建上下文如下所示:
    .
    ├── Dockerfile
    └── example
    └── README.md

    example/README.md包含:
    This is a test.

    Dockerfile包含 RUN类似于您正在使用的选项:
    # syntax=docker/dockerfile:experimental

    FROM centos AS centos

    FROM alpine
    RUN --mount=type=bind,target=/data cat /data/example/README.md > /root/README.md

    然后在构建镜像时, /root/README.mdexample/README.md的内容.

    关于Docker run --mount 在运行期间使所有文件在不同的文件夹中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59599736/

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