本文主要是介绍docker -v 容器映射NAS共享时存在不能访问的情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现象:
docker中使用-v参数映射宿主机本地目录时,如果本地目录存在有NAS存储的挂载目录,那么在NAS断开重新连接后,容器映射的目录会不能访问。
docker version 20.10.6
原因:
使用-v 映射时,docker里面只会把NAS共享挂载后的inode作为docker容器里面的文件夹访问路径,如果nfs挂载有断开,重新挂载后的inode有变化,那么docker里面还是以前的inode,所以出现宿主机挂载存在,但是docker中挂载文件不存在的情况。
另外,有部分文章说,使用VIM编辑文件也存在一样的情况,但是据我测试。宿主机目录中文件Inode变化后,映射的docker目录的文件Inode也会变化,不存在这个情况。
使用-v时,NAS存储断开时,目录Inode的一直无变化。
使用–mount 时,NAS存储断开时,目录Inode的随着挂载变化而变化。
解决方法:不使用-v,使用–mount挂载,示例如下。
type=bind,source=/docker_mount,destination=/docker_mount,bind-propagation=shared
如果已经使用-v挂载了,那么只有重新启动容器刷新docker映射的文件夹Inode。
参考:
https://docs.docker.com/storage/bind-mounts/
https://blog.csdn.net/dhaiuda/article/details/83117772
这篇关于docker -v 容器映射NAS共享时存在不能访问的情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!