Docker挂载到文件夹覆盖内容
我有一个.net Core Web
Api,其配置文件位于名为Config的文件夹下。我从中创建了图像和一个容器,并且使用终端可以正确看到该容器中包含文件夹和配置文件。
我的问题是,到目前为止,按照要求,我找不到找到将相同的容器安装/绑定Config文件夹绑定到物理路径的容器的方法:
1)将Config文件夹挂载到特定的主机位置
2)在创建容器时,Config文件夹应填充映像中的文件
3)在创建容器时,用图像中的文件覆盖文件夹中已存在的任何现有文件
4)能够从主机自定义文件夹中的配置文件
我的创建命令:
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
如文档中所指定,将 与
类型一起使用,如果文件夹中有任何文件,则这些文件将从容器中隐藏,并且应用程序将看到已部署的文件。
该解决方案的问题是我无法从主机更新config文件夹中的文件。
现在,删除 我得到相同的结果,这很令人困惑。
我尝试使用volume
,但是这样做不会覆盖主机目录中的现有文件,这些文件将在容器中使用。
附加说明,我没有在Dockerfile中指定任何内容或与卷安装相关的内容,也没有尝试创建一个卷来将其用作源,但是我认为这不会有所作为。
容器服务器在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/
回答:
首先,码头工人卷或绑定挂载的行为类似于Linux挂载。
如果主机卷/挂载存在并且包含文件,它将“覆盖”容器中的任何内容。否则,容器文件将镜像到主机卷/挂载上,并且容器文件夹和主机将同步。在两种情况下,在主机上编辑文件都将始终在容器内。
您可以执行以下操作:
docker volume create --driver local \ --opt type=none \
--opt device=$configVolumePath \
--opt o=bind \
config_vol
这将创建一个卷,该卷将保留在主机上的$ configVolumePath中。
创建容器时,请使用该卷:
docker create --volume config_vol:/app/Config
您将得到的是在启动时,主机文件夹将为空,并且映像中的文件将被“复制”到主机文件夹中。其中的编辑文件$configVolumePath
将在容器内转移,并且类似地,在容器内编辑的文件将/app/Config
反映在$configVolumePath
主机上。
以上是 Docker挂载到文件夹覆盖内容 的全部内容, 来源链接: utcz.com/qa/434256.html