Docker文件挂载理解

时间:2016-11-16 16:02:16

标签: docker

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

int a[] = {25,90,21};
int searchItem = 90;

if(sequentialSearch(searchItem, a, 3) == 1)
{
     cout << "Found Item" << endl;
}
else
{
     cout << "Item Not Found" << endl;
}

bool sequentialSearch(int searchItem, int * a, int size)
{
    for(int i = 0; i < size; i++)
    {
        if(searchItem == a[i])
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

上面的命令运行myapp容器,该容器在/ var / tmp目录中创建一个foo.txt文件到容器中。因为我需要在myapp死后将此文件保留在主机上,所以我创建了一个安装点。

我的问题是,不是在主机上创建foo.txt作为文件,而是最终得到一个名为&#34; foo.txt&#34;的空目录。 (里面没什么)。

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

所以,我的问题是,当我使用带有docker的文件挂载时,我是否需要在启动容器之前在主机上创建文件?

我想我错过了什么。谢谢你的解释。

1 个答案:

答案 0 :(得分:0)

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

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

将主机文件挂载为数据卷

-v标志也可用于从主机安装单个文件 - 而不是目录。

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

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

正如评论中所建议的那样,如果您希望容器写入目录,最好安装目录。

此致