Docker:如何与容器文件夹同步主机文件夹?

时间:2013-09-18 17:06:03

标签: nfs docker lxc

我正在开发一个由Node提供支持的网站。所以我创建了一个简单的Dockerfile,将我的站点文件添加到容器的FS,安装Node并在运行容器时运行应用程序,暴露私有端口80。

但是,如果我想更改该应用程序的文件,我已重建容器图像并重新运行它。这需要几秒钟。

是否有一种简单的方法可以让我的主机系统的应用程序文件与正在运行的容器中的应用程序文件保持同步“NFS实时同步”?

这样我只需要重新启动它就可以应用更改,甚至更好,如果我使用类似supervisor的内容,它将自动完成。

4 个答案:

答案 0 :(得分:41)

您可以使用卷来执行此操作。您有两种选择:

  1. Docker托管卷:

    docker run -v /src/path nodejsapp
    docker run -i -t -volumes-from <container id> bash
    
  2. 您在第二个容器中编辑的文件将更新第一个容器。

    1. 主机目录卷:

      docker run -v `pwd`/host/src/path:/container/src/path nodejsapp
      
    2. 您在主机上所做的更改将更新容器。

答案 1 :(得分:1)

如果您使用的是OSX,那么这种卷共享会变得非常慢,特别是对于基于节点的应用程序(很多文件)。对于此问题,http://docker-sync.io可以通过提供类似于同步的卷共享而不使用卷共享来提供帮助,这通常可以将代码目录的容器读/写速度提高50-80倍,具体取决于你使用的码头机。

有关性能,请参阅https://github.com/EugenMayer/docker-sync/wiki/4.-Performance以及如何使用它的简单示例,请参阅样板https://github.com/EugenMayer/docker-sync-boilerplate以了解您的情况,同步示例https://github.com/EugenMayer/docker-sync-boilerplate/tree/master/unison是您需要的NFS,例如sync < / p>

答案 2 :(得分:1)

docker run -dit -v ~/my/local/path:/container/path/ myimageId

对于/container/path/,您可以使用实例/usr/src/app。 标志:

-d =分离模式

-it =交互式

-v +路径=指定音量。

(如果只关心音量,可以删除-dit标志。)

Docker run reference

答案 3 :(得分:0)

为此,我使用了 Scaffold 的 File Sync 功能。它可以完成工作,而且不需要过于复杂的配置。

在我的项目中设置 Scaffold 就像 installing Skaffold 一样简单(通过 Chocolatey,因为我使用的是 Windows),在我的项目文件夹中运行 1,并回答它提出的几个问题。< /p>