58

I am working on a website powered by Node. So I have made a simple Dockerfile that adds my site's files to the container's FS, installs Node and runs the app when I run the container, exposing the private port 80.

But if I want to change a file for that app, I have rebuild the container image and re-run it. That takes some seconds.

Is there an easy way to have some sort of "live sync", NFS like, to have my host system's app files be in sync with the ones from the running container?

This way I only have to relaunch it to have changes apply, or even better, if I use something like supervisor, it will be done automatically.

4

4 回答 4

49

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

  1. Docker 托管卷:

    docker run -v /src/path nodejsapp
    docker run -i -t -volumes-from <container id> bash
    

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

  1. 主机目录卷:

    docker run -v `pwd`/host/src/path:/container/src/path nodejsapp
    

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

于 2013-09-18T18:56:47.223 回答
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 之类的同步的示例

于 2016-08-11T07:28:24.617 回答
2
docker run -dit -v ~/my/local/path:/container/path/ myimageId

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

-d = 分离模式,

-it = 交互式,

-v + 路径 = 指定卷。

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

Docker 运行参考

于 2019-12-15T01:14:09.107 回答
0

为此,我使用了 Scaffold 的文件同步功能。它可以完成工作,并且不需要过于复杂的配置。

在我的项目中设置 Scaffold 就像安装 Skaffold一样简单(通过巧克力,因为我在 Windows 上),skaffold init --generate-manifests在我的项目文件夹中运行,并回答它提出的几个问题。

于 2021-08-09T01:11:22.933 回答