如何构build一个同步源代码的docker容器?

我想为nodejs-bower-grunt构build一个容器,但是保持我的源代码与git仓库(在这种情况下是Bitbucket)同步。 这个想法是为我的团队提供一个容器,以便每个开发人员不需要在他们的环境中安装这些包。 而不是安装nodejs,bower和grunt来运行应用程序的前端,他们只是使用容器来pipe理它们,并专注于源代码。 所以这是我的DockerFile:

FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y nodejs npm git git-core RUN ln -s /usr/bin/nodejs /usr/bin/node WORKDIR /app ADD package.json /app/ ADD bower.json .bowerrc* /app/ RUN npm install -g bower RUN npm install -g grunt-cli RUN npm install RUN bower install --allow-root CMD ["grunt", "serve"] EXPOSE 9000 EXPOSE 35729 

所以我build立了容器,然后运行这个代码:

 docker run -ti -p 9000:9000 -p 35729:35729 -d -v /home/MY_USER/Projects/app:/app --name app --net=host my_repository/app 

期望VOLUME参数将源代码注入到容器中的/ app文件夹中,而不必replaceDockerFile中先前configuration的所有东西。 根据官方文档 ,内容应该保留:“ / src / webapp挂载覆盖,但不删除已有的内容 ”,但事实certificate,当我检查正在运行的容器时,挂载的内容DockerFile由parameter passing的-v文件夹内容replace。 一种解决scheme是将所有的应用程序内容复制到容器本身,然后运行容器,但是这个解决scheme对于开发项目来说是不切实际的,因为应用程序中的每个更新都需要构build另一个容器。 所以,我的问题是:我怎样才能build立这样的容器,在主机源代码中的每一个更新将反映正在运行的容器?

基于这篇文章,我find了一个解决scheme。 运行容器的正确方法应该是:

 docker run -ti -p 9000:9000 -p 35729:35729 -d -v /home/MY_USER/Projects/app/app:/app/app --name app --net=host my_repository/app 

这个命令告诉docker初始化容器,只在应用程序的子文件夹中装入一个卷,而不是整个应用程序的根结构,这样保留了在构build过程中所做的所有configuration。

我认为你将不得不从当前的主要图像的存储库中单独更改容器(多个)。 或者,您可以使用rsync之类的function来同步本地Docker容器之间的实时文件更改,然后将其推送到源代码。