我在 OS X 上使用 boot2docker 并克隆了以下 repo:
https://github.com/enokd/docker-node-hello
它基本上有一个 Dockerfile 和一个打印 hello world 的非常简单的 express 应用程序。当我构建和运行镜像时,一切都运行良好,但当然,如果我在我的 Mac 上对 index.js 进行任何更改,这些都不会反射(reflect)在我正在运行的镜像中。我似乎找不到任何关于如何设置 docker 的引用资料,以便我可以在我的开发环境中运行它以自动获取我的源代码更改,所以我觉得我“做错了”。有什么建议吗?
这是我目前的运行方式(我没有使用 Vagrant,不太确定这是否有什么不同):
$ docker build -t gasi/centos-node-hello .
$ docker run -p 49160:8080 -d gasi/centos-node-hello
$ curl localhost:49160
更新:添加了我最终所做的答案。
更新:使用 boot2docker 1.3+ 和图添加了更多当前答案。
最佳答案
您的问题真的很有趣,并且(部分)与 Docker 无关。 让我说,这里主要和最后一个问题是虚拟机的使用。
当您使用 VM(裸 Virtualbox VM、Vagrant VM、Docker boot2docker VM...)时,跟踪主机上的代码更改可能是一项挑战
VM 是 Mac(发生代码更改的地方)和应用程序堆栈(这里是运行在微型 Linux VM 上的 Docker 容器)之间的完整抽象层。
您必须在您的 Mac 和 boot2docker 之间的 Virtualbox 中明确定义一个共享文件夹(NFS,...)。此共享文件夹将是您的代码存储库的根目录。这是第一步。
Mac:/Users/You/stuff/approot ===> boot2docker:/something
- 然后,您必须告诉您的 Docker 容器使用绑定(bind)到 boot2docker 的 Volume(docker 术语),并将您的 Docker 应用程序指向它:
docker run -v /something:/app/path/inside/docker -p 49160:8080 \ -d gasi/centos-node-hello /usr/bin/node /app/path/inside/docker/index.js
关于node.js - 在开发工作流程中使用 docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796772/