Docker run--装载—在运行期间使所有文件在不同的文件夹中可用
我想在执行Docker run--装载—在运行期间使所有文件在不同的文件夹中可用,docker,dockerfile,docker-buildkit,Docker,Dockerfile,Docker Buildkit,我想在执行RUN语句期间使主机上的文件夹可用。也就是说,与使用-v运行容器的效果类似: docker run -v /path/on/host:/path/in/container mycontainer:tag 在容器中,这将为我提供/path/In/container,其中包含路径/on/host中的所有文件/文件夹 为此,我正在尝试以下实验性安装选项: 在运行期间,这将为我提供一个文件夹/path/on/host 我有两个问题: 我可以ls文件在/path/on/host中,但不能使用它
RUN
语句期间使主机上的文件夹可用。也就是说,与使用-v
运行容器的效果类似:
docker run -v /path/on/host:/path/in/container mycontainer:tag
在容器中,这将为我提供/path/In/container
,其中包含路径/on/host
中的所有文件/文件夹
为此,我正在尝试以下实验性安装选项:
在运行期间,这将为我提供一个文件夹/path/on/host
我有两个问题:
我可以ls
文件在/path/on/host
中,但不能使用它们(例如cat
它们)。我曾尝试将类型
更改为例如缓存
,并像中一样使用源代码
,但无法使其正常工作
我不知道如何在“运行
映像”中使用不同的路径,即/path/in/container
而不是/path/on/host
我认为您误解了RUN--mount=type=bind…
语法的含义。从文件中:
此装载类型允许将上下文或映像中的目录(只读)绑定到生成容器
换句话说,这不允许您在构建阶段访问任意主机目录。它与docker run
上的-v
命令行选项不同。它只允许您:
- 从生成上下文装入目录,或
- 在多阶段生成中从另一阶段装载目录
# 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/
您正在使用的语法(未指定来自的)
…只需在容器内的/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.md
包含example/README.md
您是对的--我误解了文档。谢谢你的澄清!我想没有办法完成我正在寻找的挂载吗?您好,非常感谢您澄清功能和文档!在我的例子中,我的源代码有问题,我没有找到与上下文相关的源代码,因此我得到无法计算缓存键:“/Users/bric3/opensource/panama foreign”not found:not found
。顺便说一下,#syntax=docker/dockerfile:experimental
在最近的docker版本中不再是必需的。
This is a test.
# syntax=docker/dockerfile:experimental
FROM centos AS centos
FROM alpine
RUN --mount=type=bind,target=/data cat /data/example/README.md > /root/README.md