如何将文件从Docker容器同步到其主机?

时间:2016-03-31 00:07:21

标签: linux node.js windows docker vagrant

也许我过于复杂了。

我的目标是在Windows上为Node.js应用程序开发创建基于Docker的工作流。

  1. 在开发时,我能够在容器内本地运行我的应用程序并仍然可以看到最新版本而不会有太多麻烦(我不想每次都重建图像看到最新的)。

  2. 另一方面,当我部署到生产环境时,我希望拥有源文件"烘焙"进入具有所有依赖关系(npm install

  3. 的容器图像

    所以我创建了两个Vagrantfiles - 一个用于容器,一个用于主机。这是后者的摘录:

    Vagrant.configure(2) do |config|
      config.vm.provider "docker" do |docker|
        docker.vagrant_vagrantfile = "host/Vagrantfile"  # it references the host Vagrantfile
        docker.build_dir = "."  # we have a Dockerfile in the same dir
        docker.create_args = ['--volume="/usr/src/host:/usr/src/appcontainer:rw"']
      end
    end
    

    /usr/src/host是一个包含我所有源代码的目录(没有node_modules)。在构建Dockerfile期间,Docker将package.json复制到/usr/src/appcontainer并在那里发布npm install,这对我的第二个要求(部署到生产)来说很好

    但我的第一个要求是在开发期间更改源代码,因此我将/usr/src/appcontainer挂载为指向主机目录/usr/src/host的卷。但是,这不起作用,因为/usr/src/host没有node_modules文件夹 - 此文件夹仅存在于容器中。

    整个问题似乎很容易 - 在Windows下更改文件,看到它在Linux主机VM和容器中更改,反之亦然......但我有点卡住了。

    实现此同步行为的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

  

但是,这不起作用,因为/ usr / src / host没有node_modules文件夹

您可以使用this question中描述的其中一种方法,例如使用专用于node_modules的数据卷。
或者将主机node_modules作为单独的文件夹安装在容器中。