安装卷时,docker 映像内的文件消失

sto*_*es2 3 mount docker mounted-volumes docker-volume

docker 镜像内部的/tmp目录中有几个文件。

例子

/tmp # ls -al
total 4684
drwxrwxrwt    1 root     root          4096 May 19 07:09 .
drwxr-xr-x    1 root     root          4096 May 19 08:13 ..
-rw-r--r--    1 root     root        156396 Apr 24 07:12 6359688847463040695.jpg
-rw-r--r--    1 root     root        150856 Apr 24 06:46 63596888545973599910.jpg
-rw-r--r--    1 root     root        142208 Apr 24 07:07 63596888658550828124.jpg
-rw-r--r--    1 root     root        168716 Apr 24 07:12 63596888674472576435.jpg
-rw-r--r--    1 root     root        182211 Apr 24 06:51 63596888734768961426.jpg
-rw-r--r--    1 root     root        322126 Apr 24 06:47 6359692693565384673.jpg
-rw-r--r--    1 root     root          4819 Apr 24 06:50 635974329998579791105.png
Run Code Online (Sandbox Code Playgroud)

当我输入命令来运行此图像 - >容器时。

sudo docker run -v /home/media/simple_dir2:/tmp -d simple_backup
Run Code Online (Sandbox Code Playgroud)

Expected behavior是如果我运行ls -al /home/media/simple_dir2 然后文件就会显示出来。

actual behavior什么都不存在/home/media/simple_dir2

另一方面,如果我在没有卷选项的情况下运行相同的图像,例如:

sudo docker run -d simple_backup
Run Code Online (Sandbox Code Playgroud)

并使用以下命令进入该容器:

sudo docker exec -it <simple_backup container id> /bin/sh

ls -al /tmp
Run Code Online (Sandbox Code Playgroud)

那么文件就存在了。

长话短说

我想在主机上安装一个卷(目录),并用 docker 映像内部的文件填充它。

我的环境

  • 乌班图18.04
  • 码头工人 19.03.6

J. *_*ein 5

来自: https: //docs.docker.com/storage/bind-mounts/

\n
\n

装载到容器上的非空目录\n如果绑定装载到容器上的非空目录,则目录\xe2\x80\x99 的现有内容将被绑定装载遮盖。这可能是有益的,例如当您想要测试应用程序的新版本而不构建新映像时。然而,这也可能令人惊讶,这种行为与 docker 卷的行为不同。

\n
\n
\n

那么,如果主机操作系统的目录为空,那么容器的目录将覆盖,对吗?

\n
\n

不,它不会比较它们中谁拥有文件;而是比较它们。无论如何,它只是用主机上的目录覆盖容器内的目录。

\n