docker装入文件夹覆盖的内容

我有一个.net核心networkingApi有一个名为configuration文件夹下的configuration文件。 我创build了图像和一个容器,我正确地看到使用terminal,容器包含文件夹和里面的configuration文件。

我的问题是,到目前为止,我找不到一种方法来创build相同的容器挂载/绑定Config文件夹到物理path,遵循以下要求:

1)将Config文件夹挂载到特定的主机位置

2)在容器创build时,Config文件夹应该填充图像中的文件

3)创build容器时,用文件夹中已有的文件覆盖文件夹中已有的文件

4)能够从主机自定义文件夹中的configuration文件

我的创build命令:

docker --tls -H="$containerUrl" ` create ` --hostname $hostname ` --name $containerName ` --mac-address=$containerMacAddress ` --ip $containerIpAddress ` --net "bridged-network" ` --workdir '/app' ` --mount type=bind,src=$configVolumePath,target=/app/Config ` --publish "0.0.0.0::80" ` -t ` -i $imageName":"$script:buildversion 

如文档中指定的那样,使用–mount和type bind ,如果文件夹中有任何文件,则从容器中隐藏这些文件,应用程序将看到已部署的文件。 这个解决scheme的问题是我无法从主机更新config文件夹中的文件。

现在,删除type = bind我得到相同的结果,这是令人困惑的。

我试图使用卷-volume $ configVolumePath“:/ app / Config:rw” ,但这样做主机目录中的pre exising文件不会被覆盖,这些将在容器中使用。

额外的笔记,我没有在Dockerfile中指定任何东西,或者与卷assembly相关,我没有尝试创build一个卷,然后将其用作源,但我不认为这会有所作为。

容器服务器在NAS上运行,这是以下版本:

  Version: 1.11.2 API version: 1.23 Go version: go1.5.4 Git commit: 781516c Built: Thu Aug 3 16:04:05 2017 OS/Arch: linux/amd64 

显然我错过了一些东西,我必须了解更多关于docker工人,任何人都可以帮忙吗?

我的参考:

1) https://docs.docker.com/engine/admin/volumes/bind-mounts/

2) https://docs.docker.com/engine/admin/volumes/volumes/

首先,docker卷或绑定挂载的行为就像linux挂载。

如果主机卷/装载存在并包含文件,它将“覆盖”容器中的任何内容。 如果不是,容器文件将镜像到主机卷/装载上,容器文件夹和主机将同步。 在这两种情况下,编辑主机上的文件将始终在容器内被重新采用。

在你的情况下,你可以做到以下几点:

 docker volume create --driver local \ --opt type=none \ --opt device=$configVolumePath \ --opt o=bind \ config_vol 

这将创build一个将保存在主机上的$ configVolumePath的卷。

创build容器时使用该卷:

 docker create --volume config_vol:/app/Config 

你将得到的是在启动时,主机文件夹将是空的,图像中的文件将被“复制”到主机文件夹。 在$configVolumePath编辑文件将在容器中被重新select,同样,在容器/app/Config编辑的文件将被反映在主机上的$configVolumePath