Docker文件目录挂载的两种方式以及它们之间的区别(详解)

2023年9月3日 462点热度 0人点赞 0条评论

docker有两种文件挂载方式:
绝对路径挂载方式:以斜杠/开头,如 /root/maven-repository:/root/repository
相对路径挂载方式(也叫卷挂载):直接以目录名称开头,如 maven-repository:/root/repository

docker使用卷挂载,宿主机maven-repository文件夹中如果有文件,容器中/root/repository是空文件夹,那么maven-repository文件夹会不会被清空?
在 Docker 中使用 -v 参数进行挂载时,如果宿主机的 maven-repository 文件夹中有文件,而容器中的 /root/repository 文件夹是空的,那么宿主机的 maven-repository 文件夹中的文件会被拷贝到容器中的 /root/repository 文件夹中。
当容器启动并挂载了宿主机上的 maven-repository 文件夹时,Docker 会将宿主机上的文件复制到容器中,并在容器内文件夹中创建相同的目录结构和文件。这样就保证了容器内的 /root/repository 文件夹中包含了与宿主机中的 maven-repository 文件夹相同的文件。
因此,宿主机 maven-repository 文件夹中的文件不会被清空,而是会被拷贝到容器中的 /root/repository 文件夹中,如果容器内的该文件夹为空的话。如果容器内的 /root/repository 文件夹中已经存在文件,则宿主机中的文件将被容器内的文件覆盖。
需要注意的是,如果你在容器内对 /root/repository 文件夹进行写操作,它不会同步到宿主机上的 maven-repository 文件夹中。挂载只是在容器启动时进行一次文件拷贝和同步,之后对其中的任何更新都不会影响宿主机上的文件。

当容器启动完毕,这时候如果改变宿主机的 maven-repo 文件夹中的文件,会不会被同步到容器中?
一旦容器启动完毕,挂载的宿主机的 maven-repository 文件夹中的文件的更改不会自动同步到容器中。挂载只会在容器启动时进行一次文件拷贝和同步,之后容器内的文件和宿主机的文件是分开存储的。
如果你在容器启动后更改了宿主机的 maven-repository 文件夹中的文件,容器中的 /root/repository 文件夹不会自动更新。必须重新启动容器或执行一些手动操作来实现文件的同步。
一种方法是停止和删除容器,然后重新运行容器,这会触发挂载行为,将宿主机中的 maven-repository 文件夹再次复制到容器中。
另一种方法是通过 Docker 的 docker cp 命令手动将宿主机中的文件复制到运行中的容器中。你可以使用以下命令将宿主机中的更改推送到容器:

 docker cp /path/to/maven-repository <容器ID>:/root/repository 

这将会将宿主机中的 maven-repository 文件夹中的更改复制到运行中的容器的 /root/repository 文件夹中。

需要注意的是,这些手动操作可能会中断容器中正在进行的操作,因此请确保在进行文件更改时,没有正在运行的任务依赖于这些更改。

绝对路径挂载方式跟相对路径挂载方式有哪些区别?
绝对路径挂载和相对路径挂载是两种不同的挂载方式,它们有以下区别:
文件路径指定方式:绝对路径挂载需要指定宿主机上的绝对路径,而相对路径挂载是相对于运行 docker run 命令所在的目录进行解析的。
可移植性:相对路径挂载更具可移植性,因为它与宿主机的目录结构无关,只需要相对于 docker run 命令所在的目录指定路径。相反,绝对路径挂载在不同宿主机上可能需要根据宿主机的实际路径进行调整。
易用性:相对路径挂载更容易使用,特别是当你只需要挂载当前工作目录或相对路径下的文件时。
配置文件:绝对路径挂载通常用于挂载配置文件或其他特定位置的文件。这在你想要覆盖容器中的某些文件或配置时很有用。
可读性:绝对路径挂载可能更易于理解,因为它明确指定了要挂载的具体宿主机路径。
选择使用哪种方式取决于具体的使用场景和偏好。如果你需要更可移植和易用的挂载方式,相对路径挂载可能是一个不错的选择。如果你需要覆盖容器中的特定文件或使用绝对路径来确保文件的准确位置,那么绝对路径挂载可能更适合。

小小调酒师

此刻打盹,你将做梦; 此刻学习,你将圆梦。 个人邮箱:shellways@foxmail.com

文章评论