docker 挂载目录后,再软链的文件在代码里不认为是文件或文件夹

shrrung
  • 25

1、微软云,已将新加的磁盘挂载到/mydata目录。测试可以增减文件
2、docker 将/mydata目录挂载到容器的/mydata目录下,测试系统目录里的子项都已存在,增减都OK(用的laradock的集成包,在workspace容器里配置的挂载)
image.png

image.png
3、软链接配置到容器里的项目目录下,作为一个资源文件的存储位置。
image.png
image.png

问题:

以上完成的情况下,在代码里执行创建文件操作,发现代码里不认为这个目录是文件或者文件夹。创建文件夹2021-12的时候,认为log2不是文件夹,递归创建文件夹的时候,又以log2存在,创建报错 File exists

image.png
image.png
image.png

回复
阅读 1.8k
1 个回答
weak_ptr
  • 1.8k
✓ 已被采纳

软链接可以看作是一种“快捷方式”,是对源文件路径的引用。

而docker容器隔离了容器内的文件系统和宿主机的文件系统,所以你在容器里引用一个宿主机上创建的软链接,链接目标是宿主机上的路径,而容器内没有这个文件或文件路径不对应的话,就无法访问。同理,在容器里创建的软链接,如果链接对象在宿主机不存在或路径不对应,也会出现不能访问。

但软链接本身是一个有效的“文件”,即使链接目标不存在,这个“文件”也不会自己消失,如果你想创建一个和软链接同名的文件夹,就会出现已存在的错误。


对你的问题我个人建议是不要在宿主机代码仓库里创建软链接或把软链接挂载到容器里,会产生很多问题,如果一定要,就在容器里创建软链接。可以写个启动脚本来完成初始化工作后,再启动你的代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏