也许我过于复杂了。
我的目标是在Windows上为Node.js应用程序开发创建基于Docker的工作流。
在开发时,我能够在容器内本地运行我的应用程序并仍然可以看到最新版本而不会有太多麻烦(我不想每次都重建图像看到最新的)。
另一方面,当我部署到生产环境时,我希望拥有源文件"烘焙"进入具有所有依赖关系(npm install
)
所以我创建了两个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和容器中更改,反之亦然......但我有点卡住了。
实现此同步行为的最佳做法是什么?
答案 0 :(得分:1)
但是,这不起作用,因为/ usr / src / host没有node_modules文件夹
您可以使用this question中描述的其中一种方法,例如使用专用于node_modules
的数据卷。
或者将主机node_modules
作为单独的文件夹安装在容器中。