最近在开发一个文件服务,用于公司内容各应用的文件保存和查询获取。
开发环境:windows10+.NET Core7.0+Mysql 发布环境 :Liunx+Docker
实现功能:文件服务提供接口上传文件和下载文件,服务用于内网访问。
实现中遇到的问题:由于文件保存是用的系统自带文件服务。而部署环境是Liunx+Docker,Docker是文件是隔离的,所以在使用docker部署的应用中,正常情况下只能访问docker内的文件,所以保存的文件夹也是在docker应用内,但是由于文件比较多,而docker部署的文件夹空间有限,所以需要将文件保存到docker外的文件夹内。
于是将保存路径改为绝对路径,但是发布运行发现找不到文件夹,但是文件是成功保存到服务器上了,通过find命令查找文件夹,命令如下:
find / -name "FileBucket"
-name是指定按文件名查找,”FileBucket"是文件夹名称
找到如下内容:
find: ‘/proc/22841’: 没有那个文件或目录
find: ‘/proc/22849’: 没有那个文件或目录
find: ‘/proc/22856’: 没有那个文件或目录
find: ‘/proc/22858’: 没有那个文件或目录
/var/lib/docker/overlay2/8ee6db6db05756d9884c8fd80574cc48400243c64a5fa57dbdcd896251edcbc1/diff/FileBucket
/var/lib/docker/overlay2/8ee6db6db05756d9884c8fd80574cc48400243c64a5fa57dbdcd896251edcbc1/merged/FileBucket
/FileBucket
在/var/lib/docker/overlay2/8ee6db6db05756d9884c8fd80574cc48400243c64a5fa57dbdcd896251edcbc1/diff/FileBucket文件夹中找到了上传的文件,文件还在保存在docker环境下面了,没有达到我要保存到docker环境外的目的。
于是百度了一下,找到了一个方式,就是在发布docker的时候将要保存的文件夹外挂到docker上面,命令如下:
docker run -d -p 8030:80 --name aveplugins_1 --restart=always -e TZ=Asia/Shanghai -d -v /home/AvePlugins1/back:/app -v /FileStorage:/app/FileStorage aveplugins:1.0
其中-v 是指定外挂的文件夹,-v 后面是要外挂的文件夹 :后面的docker内使用的文件夹 -name 是指定docker容器名称
发布后,将文件保存的位置配置为/FileStorage/即可。