Nor*_*ino 11 mount volume 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
Run Code Online (Sandbox Code Playgroud)
如文档中所指定的那样,使用带有类型bind的--mount,如果文件夹中有任何文件,则从容器中隐藏这些文件,应用程序将看到已部署的文件. 此解决方案的问题是我无法从主机更新config文件夹中的文件.
现在,删除type = bind我得到相同的结果,这是令人困惑的.
我尝试使用volume --volume $ configVolumePath":/ app/Config:rw",但这样做不会覆盖主机目录中的预先存在的文件,这些文件将在容器中使用.
附加说明,我没有在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
Run Code Online (Sandbox Code Playgroud)
显然,我错过了一些东西,我必须了解更多关于码头工具的信息,有人可以帮忙吗?
我的推荐:
yam*_*enk 17
首先,docker卷或绑定挂载的行为类似于linux挂载.
如果主机卷/挂载存在且包含文件,它将"覆盖"容器中的任何内容.如果不是,容器文件将镜像到主机卷/装载器上,容器文件夹和主机将同步.在这两种情况下,总是在容器内重新编辑主机上的文件.
在您的情况下,您可以执行以下操作:
docker volume create --driver local \
--opt type=none \
--opt device=$configVolumePath \
--opt o=bind \
config_vol
Run Code Online (Sandbox Code Playgroud)
这将创建一个将在主机上的$ configVolumePath中保留的卷.
创建容器时使用该卷:
docker create --volume config_vol:/app/Config
Run Code Online (Sandbox Code Playgroud)
您将获得的是启动时,主机文件夹将为空,图像中的文件将"复制"到主机文件夹中.编辑文件$configVolumePath
将在容器内被重新选择,同样在容器内编辑的文件将/app/Config
反映在$configVolumePath
主机上.
归档时间: |
|
查看次数: |
11567 次 |
最近记录: |