Docker装载到文件夹覆盖内容

Docker装载到文件夹覆盖内容,docker,volume,mount,Docker,Volume,Mount,我有一个.net核心web Api,在名为Config的文件夹下有配置文件。 我从中创建了图像和一个容器,我正确地看到使用终端时,容器中包含文件夹和配置文件 我的问题是,到目前为止,我找不到一种方法来创建相同的容器,将配置文件夹装载/绑定到物理路径,如下所示: 1) 将配置文件夹装载到特定主机位置 2) 在创建容器时,Config文件夹应填充映像中的文件 3) 在创建容器时,将文件夹中已存在的任何现有文件替换为映像中的文件 4) 能够从主机自定义文件夹中的配置文件 我的创建命令: doc

我有一个.net核心web Api,在名为Config的文件夹下有配置文件。 我从中创建了图像和一个容器,我正确地看到使用终端时,容器中包含文件夹和配置文件

我的问题是,到目前为止,我找不到一种方法来创建相同的容器,将配置文件夹装载/绑定到物理路径,如下所示:

1) 将配置文件夹装载到特定主机位置

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    
使用文档中指定的类型为绑定的--mount,如果文件夹中有任何文件,这些文件将隐藏在容器中,应用程序将看到部署的文件。 此解决方案的问题是无法从主机更新config文件夹中的文件

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

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

另外,我没有在Dockerfile或compose中指定任何与卷装载相关的内容,也没有尝试创建一个卷,然后将其用作源,但我认为这不会有什么不同

容器服务器正在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,有人能帮我吗

我的推荐人:

(一)


2)

首先,docker卷或绑定装载的行为类似于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
中编辑文件将反映在容器内部,类似地
容器中编辑的文件将反映在主机上的
$configVolumePath
中。

谢谢yamenk,所以我的问题是我没有删除文件夹的内容。我尝试创建卷,它的行为与您描述的一样。为了再次检查我是否理解正确,不需要实际的“预”创建卷,将卷参数作为docker创建的一部分传递就足够了,今晚我将尝试这样做。有没有办法通过一些--opt参数强制删除/覆盖文件夹内容?请注意,为了运行您建议的脚本,我必须使用参数--name config_!我正在寻找传递到本地卷驱动程序的选项,但在绑定装载的任何地方都找不到!小时。。。不在过去的几年中,使用docker找到一个合适的解决方案,这几天都没有浪费。你应该将这些知识提交给docker文档,因为他们关于使用--bind/mounts的文档通常是迟钝的(IMO)。我甚至一辈子都找不到我可以通过--driver传递的不同选项