【博客609】docker volume挂载本机文件出现不同步的问题解决

这篇具有很好参考价值的文章主要介绍了【博客609】docker volume挂载本机文件出现不同步的问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker volume挂载本机文件出现不同步的问题解决

场景

docker volume挂载本机文件,在宿主机修改文件之后,容器内部不会同步生效,没有发生对应的修改,需要重启容器才可以正常同步。

场景演示

启动一个busybox容器,挂载一个测试文件:

mkdir -p /home/zsf/volume
echo "test" >> /home/zsf/test.txt
docker run -id --name test_volume -v /home/zsf/volume:/root/volume -v /home/zsf/test.txt:/root/test.txt busybox

在容器里查看文件内容:

[root@test zsf]# docker exec -it test_volume cat /root/test.txt
test

修改宿主机上的文件:

[root@test zsf]# cat test.txt
test-modify

在 docker 里面查看是否发生同步修改:

[root@test zsf]# docker exec -it test_volume cat /root/test.txt
test

发现我们在外面更改的文件里面并未生效,重启下这个容器试试呢?

[root@test zsf]# docker restart test_volume
test_volume

[root@test zsf]# docker exec -it test_volume cat /root/test.txt
test-modify

重启后就又可以同步看到修改的内容了,那么原因是什么呢?

原因

docker通过 volumes 挂载文件到容器中,有两种方式。挂载目录和挂载具体文件。

挂载文件原理:

docker挂载文件时,并不是挂载了某个文件的路径,而是挂载了对应的文件,即挂载了linux指定的inode文件。当使用vim之类的编辑器进行保存时,它不是直接保存文件,而是采用了备份、替换的策略,就是编辑时,是创建一个新的文件,在保存的时候,把备份文件替换源文件,这个时候文件的 inode 就发生了变化,而原来 inode 对应的文件其实并没有修改,也就是容器内的文件没有变化。当重启容器的时候,会挂载新的 inode

文件inode经过vim修改后变化的示例,修改前:

root@ubuntu:~/Desktop/fileTest$ stat test.conf 
  文件:test.conf
  大小:7         	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:416481      硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1000/    root)   Gid:( 1000/    root)
最近访问:2020-03-29 21:45:00.355138304 +0800
最近更改:2020-03-29 21:45:00.359137009 +0800
最近改动:2020-03-29 21:45:00.367134421 +0800
创建时间:-

通过 vi 等编辑器进行修改之后,可以发现 inode 的值变了:

root@ubuntu:~/Desktop/fileTest$ stat test.conf 
  文件:test.conf
  大小:7         	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:416483      硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1000/    root)   Gid:( 1000/    root)
最近访问:2020-03-29 21:45:42.594603856 +0800
最近更改:2020-03-29 21:45:42.594603856 +0800
最近改动:2020-03-29 21:45:42.598604612 +0800
创建时间:-

解决方法

1、避免直接挂载文件,而是挂载目录,挂载目录不会有上述情况

2、如果真要挂载文件,那么要将文件权限修改成777,即 -rwxrwxrwx文章来源地址https://www.toymoban.com/news/detail-411670.html

方法:chmod 777 filename

到了这里,关于【博客609】docker volume挂载本机文件出现不同步的问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows下docker compose方式挂载数据卷volume遇到的问题

    例子一,windows 下docker desk top部署TDengine td-compose.yml 运行docker-compose 问题1: 配置文件映射卷,但没有自己生成配置文件反而报错。 解决方案:bind mount直接挂载目录的方式必须将配置文件先复制下来宿主机,因为它是按宿主机文件同步。 问题2: 部署后出现UDF一直提示重启

    2024年02月10日
    浏览(42)
  • Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)

    文章主人公:帅哥BUG😎 文章路人: 路人  🤨   路人  😛 😎: docker在容器中管理数据主要有三种方式哦~ 🤨:  啊!,我记得docker在容器中管理数据主要方式是这两种吧  - 数据卷(Volumes) - 挂载主机目录(Bind mounts)      😛:  额,主要的方式是这两种?我怎么记得是这

    2024年02月05日
    浏览(77)
  • Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Volume官网:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. First, when a Container crashes, kubelet will restart it, but the files will be lost - the Container starts with a clean state. Second, when running Containers to

    2024年02月13日
    浏览(51)
  • 远程访问群晖Drive并挂载为电脑磁盘同步备份文件「无需公网IP」

    转发自CSDN远程穿透的文章:【群晖Drive私有云】利用cpolar内网穿透实现公网远程群晖Drive 群晖作为专业的数据存储中心,在我们的工作生活中越来越常见,无论是家庭存储照片、影视剧,还是办公场所存储商业资料,群晖系统都能发挥数据中心的作用,方便我们随时存储和调

    2024年02月06日
    浏览(45)
  • docker 挂载、修改文件

    前段时间咱们使用Docker安装了Nginx并且系统学习了Nginx的相关知识,其中有一节是修改Nginx的配置达到方向代理的效果。咱们使用的是docker的 copy 命令从容器中 copy 出来相关的配置文件,在本地修改,修改完毕在使用docker的 copy 命令从本地 copy 到容器中,重启容器生效的。咱们

    2024年02月05日
    浏览(62)
  • [全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)

    源码位置: /Lib/zipfile.py/ZipFile/_extract_member/zipfile.py或者直接点击extract函数. 在使用python解压缩zip文件时, 由于需要在解压时重命名文件为我想要的格式, 而不巧的是, zipfile包官方源代码没有这个功能... 于是, 在百度之后, 果断放弃寻找现成代码的想法. 在研究了一下extract函数的原

    2024年02月08日
    浏览(38)
  • docker配置文件挂载(容器数据管理)

    在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。 这就是因为容器与数据(容器内文件)耦合带来的后果。 要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。 数据卷(volume) 是一个虚拟目录,指向宿

    2024年02月15日
    浏览(63)
  • docker安装redis,并挂载配置文件

    1:下载镜像,不添加版本 默认下载最新的 下载成功后如图所示 2:下载redis配置文件,我是在docker中下载的,也可以使用文件上传工具将配置文件上传到自己指定的目录。 首先需要安装wget,否则就会提示 命令: 下载成功后如图所示: 接着下载配置文件:(在自己指定的文

    2024年02月10日
    浏览(36)
  • docker部署nginx挂载配置文件报错

    解决方法: 在挂载nginx.conf文件时,先将配置文件放在宿主机指定的目录下 如:-v /data/topnginx/nginx.conf:/etc/nginx/nginx.conf 将nginx.conf文件先放在topnginx目录下,再运行docker run 错误提示:

    2024年02月16日
    浏览(40)
  • Docker启动Elasticsearch(挂载数据、配置文件、插件)

    docker pull elasticsearch:7.4.2 注意:启动前需要在服务器新建下列文件夹,并且文件夹的权限要改成使用 chmod -R 777 file 修改文件读写权限 先进入容器,然后执行 访问ip:9200即可。

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包