关于Docker路径挂载的问题

yueranzs 2022-05-06 16:22:59

这个问题困扰了我几天,特此来论坛寻求答案,万分感谢!


Dockefile如下:


                FROM java:
                8 
                MAINTAINER hello
                <test@
                163.com
                >
                 COPY *.jar 
                /usr
                /local
                /java
                /app.jar 

当前目录信息如下:

Dockerfile app.jar

构建镜像命令如下:

docker build 
                -t app-image .

执行容器命令如下:

docker run -it --name app -v /usr/local/docker/test:/usr/local/java app-image


最后发现,宿主机路径/usr/local/docker/test这个被创建了,是空目录,而容器路径/usr/local/java已经为空了。

我查阅过关于docker挂载卷的数据覆盖分析,说到以下两点:

1.宿主机目录为空时,将容器内数据复制到宿主机目录下。

2.宿主机目录不为空时,将宿主机目录下的数据复制到容器内,如果容器内目录不为空则将数据隐藏。


那么这里应该是符合第一点才对,但是容器内数据却清空了,百思不得其解。


使用其他方式挂载却不会,我想弄清楚为什么会出现这样的情况。

望大佬解惑,感谢!



回帖列表
tfwang0105 2024-06-17 13:59:49


因为你的Dockerfile 种没有声明 volume,所以在启动项种添加  -v /usr/local/docker/test:/usr/local/java 如果你的本机目录 /usr/local/docker/test空目录,则会清空容器路径内的所有文件。可以创建一个volume,例如: docker volume create testvolume,使用docker volume list 查看,



DRIVER    VOLUME NAME

local     testvolume



启动的时候可以写成这样
docker run -it --name app -v testvolume app-image。这样就可以把容器内的数据持久化了。

1/ 1
蝉知2.0