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

con*_*com 46 nfs lxc docker

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

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

是否有一种简单的方法来实现某种"实时同步",例如NFS,让我的主机系统的应用程序文件与正在运行的容器中的应用程序文件保持同步?

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

cre*_*ack 42

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

  1. Docker管理的卷:

    docker run -v /src/path nodejsapp
    docker run -i -t -volumes-from <container id> bash
    
    Run Code Online (Sandbox Code Playgroud)

您在第二个容器中编辑的文件将更新第一个容器.

  1. 主机目录卷:

    docker run -v `pwd`/host/src/path:/container/src/path nodejsapp
    
    Run Code Online (Sandbox Code Playgroud)

您在主机上所做的更改将更新容器.

  • 不是'pwd`总是返回绝对路径? (2认同)

Eug*_*yer 5

如果您使用的是 OSX,这种卷共享可能会变得非常缓慢,尤其是对于基于节点的应用程序(大量文件)。对于这个问题,http://docker-sync.io可以提供帮助,通过提供类似同步的卷共享,而不使用卷共享,这通常可以将代码目录的容器读/写速度提高 50-80 倍,取决于您使用的 docker-machine。

有关性能,请参阅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 的示例


Rex*_*rus 5

docker run -dit -v ~/my/local/path:/container/path/ myimageId
Run Code Online (Sandbox Code Playgroud)

例如,/container/path/您可以使用/usr/src/app. 标志:

-d = 分离模式,

-it = 互动,

-v + paths = 指定卷。

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

Docker 运行参考