1

我对 fig 和 docker 容器感到困惑。

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

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

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

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

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

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

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

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

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

最奇怪的部分是,如果我删除卷部分,一切都会保持不变。所以现在我很困惑这是怎么发生的,为什么我什至需要安装卷。

我正在运行 docker 1.4.1

4

1 回答 1

2

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

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

您只能将主机中的卷挂载到容器中,这就是您正在做的事情以及为什么它是空的,因为 Docker 为您创建了一个空目录并将其挂载到容器中的现有数据上。

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

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


插件:当您需要从容器中获取某些东西时,您可以做的是安装/docker_data/elasticsearch:/data-to-copy,然后fig run elasticsearch cp -r /data /data-to-copy. 但我怀疑这对数据有用,虽然我在项目中做了类似的事情,但对于应用程序模板的源代码。

于 2015-01-22T22:23:46.097 回答