安装卷时,docker 中的目录为空

when mounting volume, directory is empty in docker

当我 运行 与

结点时
docker run -v D:/mydir:/data

/data 的内容首先被复制到我的卷中 运行,这是我所期望的。

如果我

docker run -v D:/mydir:/usr/src/node-red/node_modules nodered

那么卷是空的

我期望在开始时将 node_modules 的内容复制到卷中...我错过了什么?


我可以再说明一点:

docker run --rm -v d:/VM:/data nodered/node-red-docker ls /data

--> 列出文件

docker run --rm  ls /usr/src/node-red/node_modules

--> 列出node_modules

的内容
docker run --rm -v d:/VM:/usr/src/node-red/node_modules nodered/node-red-docker ls /usr/src/node-red/node_modules

--> 为空!

Docker does not support copying 数据从基础镜像到挂载为容器卷的主机目录。

您正在将主机目录作为卷安装,因此没有任何复制正在进行 - 容器内的安装路径被映射到主机上的路径,因此您看到的是主机的内容目录。

挂载时,卷位于联合文件系统之外,因此您不会获得将映像内容与主机目录内容合并的覆盖层。相反,您实际上绕过了该卷的图像内容,并将其重新指向您的主机。

样本:

touch /docker/nodered-modules/sample.txt                                           
docker run --rm -v /docker/nodered-modules:/usr/src/node-red/node_modules nodered/node-red-docker ls /usr/src/node-red/node_modules                                         
sample.txt

touch /docker/nodered-data/sample.txt                                                                                                         
docker run --rm -v /docker/nodered-data:/data nodered/node-red-docker ls /data       
sample.txt 

您看到差异的原因是图像中的 /data 卷是 defined in the Dockerfile 并且是空的,因此您看到的主机目录内容与预期一致。 modules 目录在图像中不为空,但您将其重新指向主机上的一个空目录。