Podman挂载点的相对路径与绝对路径对比

后端开发 2026-07-11

我现在正在对一个项目进行容器化,但在构建时它依赖于一个不在其相对路径内的目录。我在Containerfile中使用了这个命令:

RUN --mount=type=bind,source=/path/on/host,target=/mnt/hostdir

对于source,它一直选择我的相对路径,但我需要的是从该目录获取数据的绝对路径。

解决方案

即使使用 RUN --mount=type=bind,在镜像构建期间也不能挂载任意主机目录,你需要使用下述 How to include files outside of Docker's build context? 中描述的技术之一。

Docker Hub docker/dockerfile 镜像提供了BuildKit后端使用的语法,且文档与官方 Dockerfile参考 的文档略有不同。特别地,镜像文档的 注记(强调部分)

RUN --mount=type=bind(默认挂载类型)

该挂载类型允许将目录(只读)绑定到构建容器,来源可以是在构建上下文中的目录,或来自某个镜像。

参数集也让这点变得清晰:如果你使用 from=stagename 参数,你可以定位到另一个构建阶段的根目录,或者你可以使用 from=image:tag 从另一个镜像中使用文件,但在没有 from=... 的情况下,源“默认为构建上下文”(同上)。

这意味着 RUN --mount=type=bind,source=... 遵循与左侧 COPY 相同的路径规则,并且它可以拷贝 COPY 能拷贝的同样文件。但这也意味着它只能从其他镜像、前一个构建阶段,或构建上下文目录中拷贝文件。像 COPY 一样,如果你使用绝对路径但目标是构建上下文,它总是被解释为相对于构建上下文目录的路径。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章