Docker文件挂载的理解

我使用docker,当我尝试在主机文件上安装一个容器文件时,我有一个奇怪的行为。

docker run -v /var/tmp/foo.txt:/var/tmp/foo.txt myapp 

上面的命令运行myapp容器,在容器中创build一个foo.txt文件到/ var / tmp目录中。 因为我需要在myapp死后将这个文件保存在主机上,所以我创build了一个挂载点。

我的问题是,而不是创buildfoo.txt作为主机上的文件,我结束了一个名为“foo.txt”(没有内部)的空目录。

但是,如果我在主机上创build了一个空的文本文件foo.txt,并且如果我再次运行myapp,它将按预期工作。

所以,我的问题是,我需要在启动容器之前在主机上创build文件,当我使用docker的文件装载?

我想我错过了一些东西。 谢谢你的解释。

事实上,正如您发现的,要将主机文件挂载为数据卷,则该文件必须存在,否则docker将创build一个目录并将其挂载。

来自: https : //docs.docker.com/engine/tutorials/dockervolumes/

将主机文件挂载为数据卷

-v标志也可以用来从主机上挂载一个文件 – 而不仅仅是目录。

 $ docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash 

请注意,它从不说主机上不存在该文件。

正如在注释中所build议的那样,如果您希望容器写入目录,则最好挂载一个目录。

问候