有没有办法在boot2docker上下文中为Docker的卷装载复制pwd?

所以目前我可以这样做: docker-compose.yml docker -v .:/usr/src/app甚至在我docker-compose.yml指定它:

 web: volumes: - .:/usr/src/app 

但是,当我试图在我的Dockerfile定义这个:

 VOLUME .:/usr/src/app 

它没有安装任何东西。

现在我明白了使用OSX的复杂性,所以我必须虚拟化环境以通过boot2docker运行Docker,并且boot2docker通过将/User挂载到运行Docker的Linux机器来解决复制问题。

文档要我明确,但因为我的明确性要求我命名我的用户(在这种情况下/User/krainboltgreene/code/krainboltgreene/blankrails )它似乎非惯用,因为这显然不适用于其他人的环境。

这是什么解决scheme? 我的意思是,我可以在技术上将这一切工作在没有(如上面提到的CLI和撰写工作正常),但它意味着不能做项目特定供应(凉亭安装,npm安装,硫化等)。

由于您提到的可移植性原因(不是每个人都将具有相同的目录,并且存在有关安装敏感文件的安全问题),您不能在Dockerfile中为卷指定主机目录。

如果你这样做:

 VOLUME /usr/src/app 

Docker将在运行时为该文件夹自动设置一个卷,该文件夹将映射到/var/lib/docker/volumes目录下。

如果你想在开发过程中快速做出改变,我会build议在Dockerfile中使用COPY ,但是在运行时使用卷在本地进行本地修改。 这有一个缺点,如果你卷装一个文件夹,该容器中该目录的所有内容将被隐藏(而不是合并)。

docker run -v .:/usr/src/app ...命令以及docker-compose定义在运行时执行。 Dockerfile指令在构build期间执行。

顺便说一下, Dockerfile的指令在语法上是不正确的。 它应该是VOLUME /usr/src/app

VOLUME关键字只定义了稍后在运行时这个位置将被存储在一个卷上。 因此,通过进一步Dockerfile指令或手动提交到该位置添加的所有文件都将被忽略,而不会添加到生成的映像中。

现在在运行时,当你没有指定一个卷的时候,Docker会为你生成一个默认为空的卷。

要让您的docker-compose安装程序为其他同事工作,您可以简单地将blankrails docker-composeconfiguration文件作为您的blankrails项目文件夹的一部分。 然后,每个人都在该目录中运行docker-compose ,并提供您的configuration。

编辑

我不知道你的意思是什么项目具体configuration。 但是,如果您的目标是为定义的音量提供默认内容,则可以执行以下操作:

  • Dockerfile构build期间将所有必需的项目文件添加到Dockerfile上的/bootstrap文件夹中。
  • 而不是直接执行你的应用程序使用CMD的启动shell脚本。
  • 在该启动脚本中,您可以检查挂载到/usr/src/app的卷是否为空。 当它为空时,将所有/bootstrap内容复制到其中。
  • 之后,从前台脚本中启动您的应用程序。

采用这种方法,您可以轻松地为已安装的卷提供默认文件集。 而当你重新使用容量时,例如容器重启之后,容器只能在卷上的文件中工作,而不会在启动时再次触及它们。 所以修改后的文件将被保留。