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

背景

在使用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目录下

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值