关于Docker路径挂载的问题
2022-05-06 16:22:59
陈悦
  • 访问次数: 5
  • 注册日期: 2022-05-06
  • 最后登录: 2022-08-14

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


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.宿主机目录不为空时,将宿主机目录下的数据复制到容器内,如果容器内目录不为空则将数据隐藏。


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


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

望大佬解惑,感谢!



陈悦 最后编辑, 2022-05-06 16:25:27
沙发
2024-06-17 13:59:49
王德发
  • 访问次数: 2
  • 注册日期: 2024-06-17
  • 最后登录: 2024-06-17

因为你的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