我在OS X上使用boot2docker,克隆了以下repo:
https://github.com/enokd/docker-node-hello
它基本上有一个Dockerfile和一个非常简单的快速应用程序打印你的世界.当我构建和运行映像时,一切都很好,但是当然,如果我对我的Mac上的index.js进行任何更改,这些都不会反映在我的运行映像中.我似乎没有找到任何关于我如何设置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添加更多当前答案,
让我说这里的主要和最后一个问题是使用虚拟机.
使用虚拟机(裸虚拟机VM,Vagrant VM,Docker boot2docker VM …)时,跟踪主机上的代码更改可能是一个挑战,
虚拟机是您的Mac(您的代码更改发生)和应用程序堆栈(此处,运行在小型Linux VM上的Docker容器)之间的完整抽象层.
>您必须在VirtualBox中,在Mac和boot2docker之间显式定义共享文件夹(NFS,…).该共享文件夹将是您的代码存储库的根.这是第一步.
Mac:/ Users / You / stuff / approot ===> boot2docker:/ something
>然后,您必须告诉Docker容器使用一个绑定到boot2docker的卷(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
NodeJ检测文件变化是另一个挑战.您需要一个额外的包装器来观看文件系统,并在代码更改时重新启动Node(Forever,Nodemon …).
>然后,由于更改不会发生在本地文件系统上,而是在共享文件夹上,您可能必须告诉Nodejs监视器(Forever / Nodemon / …)使用轮询模式.它工作(或多或少),但会燃烧很多cpu.