1、触发场景
使用大文件调用部署了daprd的业务接口,ContentType为multipart/form-data,daprd会报错:
2023/12/28 03:27:18 error when serving connection "xxx.xxx.xxx.xxx:3500"<->"xxx.xxx.xxx.xxx:5208": cannot read multipart/form-data body: open /tmp/multipart-4010478391: read-only file system
2、分析
看报错好像是权限问题
由于我使用的dapr.io/app-protocol是http,所以使用的是fasthttp这个包,fasthttp在处理multipart时,调用的是官方mine库,默认传入的参数为16M:
该参数表示如果文件小于16M,就存放在内存中,如果大于16M,就创建临时文件,可以看下面mine的源码:
会在tmp目录下创建multipart-开头的文件,这样的话就可以和前面的报错信息吻合。
3、解决方案
相应业务下面添加annotation:
dapr.io/volume-mounts-rw: "my-volume:/tmp"
并且挂载
volumes:
- emptyDir: {}
name: my-volume