docker镜像挂载目录启动容器,容器内目录内容消失
2023-12-29 16:48:09
背景
在使用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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!