想要使用Docker卷的持久数据,而是使用空目录

时间:2017-10-03 22:43:08

标签: docker docker-compose

我正在为一个Java应用程序编写一个Dockerfile,但我正在努力处理卷:挂载的卷是空的。 我已经阅读了Dockerfile参考指南以及编写Dockerfiles的最佳实践,但是,首先,我的例子非常复杂。

我想要做的是能够在主机上安装以下项目(在已安装的卷中):

  1. 配置文件夹,
  2. 日志文件夹,
  3. 数据文件夹,
  4. 属性文件
  5. 让我总结一下: 当应用程序安装(使用RUN命令从tar.gz中提取)时,它会写入一堆文件和目录(包括log和conf)。 当应用程序启动(使用CMD或ENTRYPOINT)时,它会创建一个数据文件夹(如果它不存在)并将数据文件放入其中。

    我只对以下内容感兴趣:

    1. / rootapplicationfolder / conf_folder
    2. / rootapplicationfolder / log_folder
    3. / rootapplicationfolder / data_folder
    4. / rootapplicationfolder / properties_files
    5. 我对/ rootapplicationfolder / binary_files

      不感兴趣

      有一些我没看到的东西。我已阅读并应用以下两个链接中的信息,但未成功。

      问题: 我应该只使用/ rootapplicationfolder映射主机上的顶级目录吗?文件怎么样?

      我的Dockerfile中'VOLUME'的顺序是否重要? 是否需要在放气之前或之后放置(RUN tar zxvf compressed_application)?

      https://groups.google.com/forum/#!topic/docker-user/T84nlzw_vpI

      Docker on Linux - Empty mounted volumes

2 个答案:

答案 0 :(得分:1)

尝试使用Docker-compose,使用volumes属性设置要在机器和容器之间安装的路径。

版本2示例

web:
image: my-web-app
build:.
command: bash -c "npm start"
ports:
  - "8888:8888"
volumes:
  - .:/home/app/code         (This mount your current path with /home/app/code)
  - /home/app/code/node_modules/          (unmount sub directory)
environment:
  NODE_ENV: development

您也可以查看此存储库。 https://github.com/williamcabrera4/docker-flask/blob/master/docker-compose.yml

答案 1 :(得分:0)

好吧,我已经设法得到了我想要的东西。 首先,我的 Dockerfile 中没有&strong> VOLUME 指令。 所有共享目录都是使用 docker run 命令的 -v 选项创建的。

之后,每当提取"提取"会覆盖用 -v 挂载的现有目录,因为它根本不可能。

因此,我将存档放在存储 -v 的卷不存在的地方,并且在此步骤之后,我 mv < / em> deflated / somedirectory的内容为 -vMountedSomeDirectory

我仍然遇到CentOS上的docker问题, mv 会将文件复制到目的地,但移动后无法在源头删除它们。我累了,只是简单地使用debian发行版。