当前位置:   article > 正文

Yapi 1.10.3迁移踩坑记_error: erofs: read-only file system, mkdir '/sys/f

error: erofs: read-only file system, mkdir '/sys/fs/cgroup/cpu/safeify

1.9.2有漏洞,mock会被入侵,而原本的集合测试中使用了assert断言。

网上所有的方案全是

在镜像中启动服务报错:Error: EROFS: read-only file system, mkdir '/sys/fs/cgroup/cpu/safeify'

这是safeify为了限定CPU资源使用,需要在此路径下写入文件,但是在镜像中此路径为只读路径,在 new Safeify对象时设置unrestricted: true,即可。

断言功能不可用,assert.equal is not a function

safeify对于执行脚本中库的引入方式与之前不同,需要通过unsafe来实现,具体可以看上面的sandbox.js的实现。

我用docker-compose的方式部署,看得是一头雾水

最后找到了文件所在位置

docker-compose exec yapi bash
进入 cd /home/vendors/server/utils
vim sandbox.js进行更改即可

镜像中没有yum没有vim,我们用apt安装
apt-get install vim,
出现Unable to locate package vim是apt过旧没有vim相关的包,进行包管理工具更新
apt-get update 
重新输入
apt-get install vim 进行安装
 

  1. const Safeify = require('safeify').default;
  2. module.exports = async function sandboxFn(context, script) {
  3. // 创建 safeify 实例
  4. const safeVm = new Safeify({
  5. timeout: 3000,
  6. asyncTimeout: 60000,
  7. // cpuQuota: 0.5,
  8. // true为不受CPU限制,解决safeify只读问题
  9. unrestricted: true,
  10. //引入assert,解决assert.equal not a function 问题
  11. unsafe: {
  12. modules: {
  13. assert: 'assert'
  14. }
  15. }
  16. });
  17. safeVm.preset('const assert = require("assert");');
  18. script += "; return this;";
  19. const result = await safeVm.run(script, context);
  20. safeVm.destroy();
  21. return result
  22. };

改完之后出现Request failed with status code 504

查看日志发现了另外的报错。对应的github issue 暂时还没解决

https://github.com/YMFE/yapi/issues/2543icon-default.png?t=M5H6https://github.com/YMFE/yapi/issues/2543
UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON

查看源码定位到应该是测试集合循环后的一个问题,前端同事看了源码之后,试着将sandbox.js 的return this移除后,该报错解决了。虽然这个报错解决了,但是还有另外的报错。

最后是回滚回原来的版本。做一些安全策略的限制。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/309016
推荐阅读
相关标签
  

闽ICP备14008679号