目前我可以这样做:docker -v .:/usr/src/app
甚至可以在docker-compose.yml
中指定:
web:
volumes:
- .:/usr/src/app
但是当我尝试在我的Dockerfile
中定义它时:
VOLUME .:/usr/src/app
它没有任何东西。
现在我理解我使用OSX的复杂性,所以我必须虚拟化环境以通过boot2docker运行Docker,并且boot2docker通过将/User
挂载到运行的linux机器来解决复制问题泊坞。
文档要求我明确,但由于我的明确要求我命名我的用户(在这种情况下/User/krainboltgreene/code/krainboltgreene/blankrails
),这似乎是非惯用的,因为这显然不适用于其他人& #39;环境。
解决方案是什么?我的意思是,从技术上讲,我可以在没有这一切的情况下工作(如上所述CLI和compose工作正常),但这意味着无法进行项目特定的配置(bower安装,npm安装,硫化等)。
答案 0 :(得分:1)
您无法为Dockerfile中的卷指定主机目录,因为您提到的可移植性原因(并非每个人都有相同的目录,并且存在有关安装敏感文件的安全问题)。
如果您改为:
VOLUME /usr/src/app
Docker会在运行时为该文件夹自动设置一个卷,该卷将映射到/var/lib/docker/volumes
下的目录。
如果您希望能够在开发过程中快速进行更改,我建议在Dockerfile中使用COPY
,但在运行时使用卷在顶部安装本地更改。这样做的缺点是,如果您批量安装文件夹,容器中该目录的所有内容都将被隐藏(而不是合并)。
答案 1 :(得分:0)
在{strong>运行时期间执行docker run -v .:/usr/src/app ...
命令以及docker-compose
定义。而Dockerfile
指令在构建时间期间执行。
顺便说一下Dockerfile
中的指令在语法上是不正确的。它应该是VOLUME /usr/src/app
。
VOLUME
关键字仅定义稍后在运行时此位置将存储在卷上。因此,您通过进一步Dockerfile
指令或手动提交添加到该位置的所有文件都将被忽略,并且不会添加到生成的图像中。
现在在运行时期间,当你没有指定一个卷时,Docker会为你生成一个默认为空的卷。
要让docker-compose
设置为其他同事工作,您只需将docker-compose
配置文件作为blankrails
项目文件夹的一部分即可。然后每个人都从该目录中运行docker-compose
,并且您提供的配置将起作用。
修改强>:
我不清楚您对项目特定配置的确切含义。但是,如果您的目标是为定义的卷提供默认内容,则可以执行以下操作:
Dockerfile
版本中将所有必需的项目文件添加到图片上的/bootstrap
文件夹中。CMD
的启动shell脚本。/usr/src/app
的卷是否为空。如果为空,请将所有/bootstrap
内容复制到其中。使用该方法,您可以轻松地为已安装的卷提供默认文件集。当您重新使用该卷时,例如容器重启后,容器只能处理卷上的文件,而不会在启动时再次触摸它们。因此修改后的文件将被保留。