docker - 当您 mv docker 容器卷正在使用的文件夹时会发生什么?

标签 docker docker-run

假设我像这样运行一个容器:

docker run -v /host/folder:/data some-image

如果我们运行 mv/host/folder/host/folder2,我肯定会发生不好的事情,唯一的解决方案是停止容器并重新启动它?

最佳答案

Docker 使用绑定(bind)挂载 a la mount --bind 使卷可用。

绑定(bind)挂载的行为很像硬链接(hard link)。如果您使用 ln foo barfoo 硬链接(hard link)到 bar,您可以重命名或删除 foo 并且它不会不会影响 bar,因为两个文件都指向同一个 inode。同样,如果您使用 mount --bind foo barfoo 绑定(bind)到 bar,则移动或删除 foo/ '影响 bar/

让我们看一下两个测试目录 foobar:

$ mkdir foo bar
$ touch foo/FOO bar/BAR
$ ls foo/
FOO
$ ls bar/
BAR

如果我们将 foo 挂载到 bar 之上,然后重命名 foobar 不受影响:

$ sudo mount --bind foo bar
$ ls bar/
FOO
$ mv foo foo.renamed
$ ls bar/
FOO

关于docker - 当您 mv docker 容器卷正在使用的文件夹时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56137517/

相关文章:

docker - 如何覆盖/发现基本图像的 CMD/ENTRYPOINT

docker - 我将如何创建 Gradle 应用程序的 docker 容器?

docker - nvidia/cuda 镜像中的 NVidia 驱动程序库

docker - Docker运行失败错误 ' Extra argument XXX'

docker run 期间的 docker 卷

docker - 如何使用 <none> 标签运行 docker 镜像

docker run --name 与 --hostname 作为命令行选项的区别(ping : bad address)

docker - “Unable to locate package build-essential”而Docker基于Debian Jessie构建

git - docker-compose 无法从 TFS (Team Foundation Server) 解析 Git URI

docker - 在 docker 中,commit 和 dockerfile 的区别