docker - 使用 Fig 和 Docker 了解挂载目录

标签 docker fig

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

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

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

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

我运行它, Elasticsearch 运行良好。然后我在那里 curl 一些数据,我看到了。

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

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

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

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

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

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

我正在运行 docker 1.4.1

最佳答案

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

您尝试做的是安装卷 从你的容器到你的主机 ,这是不可能的(从 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 .但我怀疑这对数据有用,尽管我确实 something similar在项目中,但用于应用程序模板的源代码。

关于docker - 使用 Fig 和 Docker 了解挂载目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28099528/

相关文章:

docker - docker EXPOSE 是指容器端口还是主机端口?

docker - Docker-在构建Docker镜像期间无法访问网络中的其他容器

docker - 识别 docker swarm 中的不同副本

Docker 编写使用 env_file 参数指定的环境变量在 dockerfile 中不起作用

caching - 阻止Docker从缓存创建图像

python - Heroku 容器 :push always re-installs conda packages

javascript - 在函数之外返回值

Docker Compose 不绑定(bind)端口

docker/无花果 : port forwarding to guest machine does not work on MacOS

docker - 无花果(Docker):如何根据环境指定运行哪些服务