Docker数据卷覆盖的问题

Docker数据卷覆盖的问题

问题描述:

我编写了一个Dockerfile,发现使用路径挂载(宿主机路径为空甚至不存在)到宿主机时,容器里的内容不可见,我有搜索过相关解决方案,但仍是不解。


相关代码:

Dockerfile

FROM openjdk:18
MAINTAINER xxxxxx<xxxxxx@163.com>

COPY plugins/menu-panel.jar /usr/local/project/plugins/menu-panel.jar
COPY spigot-1.18.2.jar /usr/local/project/spigot-1.18.2.jar
COPY eula.txt /usr/local/project/eula.txt
  
WORKDIR /usr/local/project

ENV PROJECT=/usr/local/project/

VOLUME $PROJECT
EXPOSE 25565

ENTRYPOINT java -Xmx1G -jar -Dfile.encoding=UTF-8 spigot-1.18.2.jar


docker构建镜像

docker build -t xxx:1.0 .


docker运行容器

docker run -d --name mc-server -v /usr/local/docker/test:/usr/local/project -p 25560:25565 xxx:1.0


运行过后,容器内没有我dockerfile拷贝过去的相关jar或是txt,宿主机路径也为空。


我有去百度过docker关于数据卷覆盖原则;

1.如果容器中的非空目录是其Dockerfile中使用_VOLUME命令_声明过的,则容器内文件会被复制到宿主机。否则,容器内的目录会被清空。

2.只要宿主机的目录不为空,则一定会覆盖掉容器内的目录。


请老师解答疑惑。



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
张飞扬 2022-06-18 16:59:47

Docker后台卷管理主要有三层,只读层来自于镜像制作过程,读写层来自于容器启动后的数据修改,挂载层来自于容器启动时的目录映射。挂载层掩盖读写层,读写层掩盖只读层,所以出现你登录容器看不到只读层文件的情况

  • 那为什么我只有挂载宿主机路径时容器数据才为空呢?其他不论是具名还是匿名挂载都是可以正常运行我dockerfile后面的命令——执行jar

    2022-06-18 17:19:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师