使用 Fig 和 Docker 了解挂载目录

Understanding Mounted Directories with Fig and Docker

我对无花果和 docker 容器感到困惑。

我正在尝试启动 Elastic Search 并在我的 vagrant box 上 运行ning。

所以我有一个 fig yml,看起来像这样:

elasticsearch:
  image: dockerfile/elasticsearch
  ports:
    - "9200:9200"
  expose:
    - "9200"
  volumes:
    - /docker_data/elasticsearch:/data

我运行它,弹性搜索运行没问题。然后我在那里卷曲一些数据,我看到了。

关于 fig yaml 的 volumes 部分 - 我试图将 elasticsearch 容器内的 /data 文件夹挂载到 docker_data,这样数据将保持不变。

然而,非常令人困惑的是,当我进入我的主机 vagrant 机器并 cd 进入 /docker_data/elasticsearch 时......它是 empty?

当我 cd 进入我的 elasticsearch 容器的 /data 目录时...它也是空的

奇怪的是数据是持久的——所以我很难找出数据实际存储在 docker 容器中的位置,因为根据文档,数据应该存储在那里。

我 运行 在用 mysql 替换 elasticsearch 时遇到了同样的问题 - 当我挂载 /var/lib/mysql 时,它在容器和主机上都显示为空。

最奇怪的是,如果我删除卷部分,所有内容仍然存在。所以现在我很困惑这是怎么回事,为什么我什至需要安装卷。

我是运行宁docker1.4.1

我在理解卷时遇到了完全相同的问题。

您尝试做的是将卷 从您的容器安装到您的主机 ,这是不可能的(AFAIK 自 Docker 1.4.1 起)。

您只能将卷从您的主机安装到您的容器,这就是您正在做的以及为什么它是空的,因为Docker为创建了一个空目录您并将此 "over" 现有数据装载到容器中。

如果容器现在写入 /data,它也会出现在您的主机上,但这样做时要注意权限,尤其是使用 Vagrant 或 boot2docker 时。

如果删除卷,容器会保留其 /data,因为此文件夹被定义为容器 Dockerfile 的卷。查看文档以了解有关卷的语法和持久性的详细信息。


插件:当你需要从容器中获取东西时,你可以做的是安装 /docker_data/elasticsearch:/data-to-copy 然后 fig run elasticsearch cp -r /data /data-to-copy。但我怀疑这对数据有用,尽管我在项目中 something similar,但对于应用程序模板的源代码。