docker镜像挂载目录启动容器,容器内目录内容消失

发布时间:2023年12月29日

背景

在使用docker容器过程中,经常需要把docker容器中的目录挂载到宿主机中。如果容器中的目录(target)中存在数据,这个时候直接挂载到宿主机的source目录中,会发现容器target目录下的文件会丢失。

解决办法

方法一: 通过容器卷的方式挂载目录

关于容器卷的使用,请参考https://zhuanlan.zhihu.com/p/597209476

  • 创建挂载卷
docker volume create --name vol_simple
  • 挂载卷

docker run -it -v vol_simple:/data ...

说明

启动容器后,容器中的/data数据会被写入到vol_simple中。测试后发现如果同时再启动一个容器挂载卷后, vol_simple中的数据不会因为新的容器的出现而发生数据改变。

方法二:重新构建镜像
  • 制作Dockerfile文件
vim Dockerfile

# 设置基础镜像
FROM base_image:1.0.0

# 把当前目录下的文件复制到镜像的/datatmp下
COPY  data /datatmp

#制作一个docker-entrypoint.sh脚本,也可以自己写命令
COPY docker-entrypoint.sh /usr/bin/docker-entrypoint.sh

ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
  • 制作docker-entrypoint.sh启动脚本
#!/bin/sh
# 把/datatmp目录下的文件复制到/data目录下
mv /datatmp/* /data
# 启动服务...
sh java -jar app.jar
  • 构建镜像
# 进入到Dockerfile所在的文件目录下(后面的 . 不要忘了)
docker build  -t myapp:1.0.0 .

  • 启动容器
#/host/data是宿主机路径
docker run -it -v /host/data:/data ...

说明

每次重新docker run启动容器,都会把容器中/datatmp/*下的文件复制一遍到/data目录下

文章来源:https://blog.csdn.net/abments/article/details/135290932
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。