我正在为一个Java应用程序编写一个Dockerfile,但我正在努力处理卷:挂载的卷是空的。 我已经阅读了Dockerfile参考指南以及编写Dockerfiles的最佳实践,但是,首先,我的例子非常复杂。
我想要做的是能够在主机上安装以下项目(在已安装的卷中):
让我总结一下: 当应用程序安装(使用RUN命令从tar.gz中提取)时,它会写入一堆文件和目录(包括log和conf)。 当应用程序启动(使用CMD或ENTRYPOINT)时,它会创建一个数据文件夹(如果它不存在)并将数据文件放入其中。
我只对以下内容感兴趣:
我对/ rootapplicationfolder / binary_files
不感兴趣有一些我没看到的东西。我已阅读并应用以下两个链接中的信息,但未成功。
问题: 我应该只使用/ rootapplicationfolder映射主机上的顶级目录吗?文件怎么样?
我的Dockerfile中'VOLUME'的顺序是否重要? 是否需要在放气之前或之后放置(RUN tar zxvf compressed_application)?
https://groups.google.com/forum/#!topic/docker-user/T84nlzw_vpI
答案 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发行版。