当前位置: 首页 > 面试题库 >

Docker挂载到文件夹覆盖内容

洪博涛
2023-03-14
问题内容

我有一个.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

如文档中所指定,将 --mountbind
类型一起使用,如果文件夹中有任何文件,则这些文件将从容器中隐藏,并且应用程序将看到已部署的文件。
解决方案的问题是我无法从主机更新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

显然,我缺少了一些东西,我必须了解有关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主机上。



 类似资料:
  • 问题内容: 我在Windows中使用Docker Toolbox,并尝试将Windows文件夹安装在docker-compose.yml文件中,如下所示: 我的目标是将Docker Toolbox已经创建的boot2docker VM映像安装到该映像,然后从该映像加载到其中的nginx容器。 不幸的是,它不起作用。我在boot2docker映像中找到一个文件夹sss,但是它没有指定我的Window

  • 这是撰写文件 输出命令: 在docker-entrypoint-initdb. d中,有两个bash脚本,它们创建一个数据库并从转储文件导入到这个数据库。但它在窗口10中不起作用。 这些脚本在MAC OS、Ubuntu中运行良好,我使用docker 1.12.1。我尝试运行具有相同配置和exec的其他容器到容器,但docker-entrypoint-initdb. d不包含我编写的脚本。 谢谢你的

  • 我在根目录中有一个htaccess文件,在电影文件夹中有另一个htaccess文件。我想停止所有重写URL或影响“电影”文件夹的条件。我在电影文件夹访问中有一些其他规则。 我的根访问权限如下所示 我的子目录电影文件夹htaccess 上面的代码只是我最初的htaccess的一部分

  • 我有一个应用程序,下载一个单一的html文件和各种图像,有时,mp4视频。 在初次下载后,后台服务每15分钟进行一次重复下载。 该服务检查是否有任何新文件,是否有任何文件被修改(在这种情况下,通常是html文件被修改,一些新的图像将被下载) 我有一个显示html文件的webview,在后台服务成功下载一些新资产后,webview会被刷新。 然而,当服务下载时,应用程序将使用文件,并在webview

  • 问题内容: 我正在尝试将源文件安装到位于/ var / dynamo的Docker目录中。我希望能够在本地运行Docker并在工作时使用本地文件。 使用运行命令: 与我的 Dockerfile 但是,当我将bash放入容器并运行时,该目录 为空! 运行显示目录已正确安装 Docker版本是1.9.1 问题答案: Docker&Virtualbox在将卷装载到/ Users目录之外时似乎出现了问题。

  • 我想在Windows10上运行一个容器,并将我的本地文件夹挂载到容器中的一个文件夹中。让我们以下面的命令为例,但任何容器都可以。