也许我把这个复杂化了。
我的目标是在 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 和容器中查看它的更改,反之亦然...但我有点卡住了。
实现这种同步行为的最佳做法是什么?
最佳答案
However, this is not working, because /usr/src/host doesn't have a node_modules folder
您可以使用 this question 中描述的方法之一。 ,例如通过使用专用于 node_modules
的数据卷。
或者将主机 node_modules
安装为容器中的单独文件夹。
关于linux - 如何将文件从 Docker 容器同步回其主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36321966/