You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TinyGo编译Go到Wasm后Wasmtime执行出现errno76目录访问错误排查

问题:WASI环境下读取已存在目录失败(errno 76)

问题详情

测试代码:

func main() {
    path, err := os.Getwd()
    log.Println(path, err)
    files, err := ioutil.ReadDir("/etc/dse")
    log.Println(files, err)
}

编译命令:

tinygo build -target wasi -o list.wasm list.go

执行命令:

wasmtime list.wasm

执行输出:

2023/05/05 16:00:50 / <nil>
2023/05/05 16:00:50 [] open /etc/dse: errno 76

已知主机上/etc/dse目录实际存在且权限为777,询问错误原因及解决方法。

错误原因

WASI(WebAssembly System Interface)是沙箱化运行环境,默认不会将主机文件系统的任何目录暴露给Wasm实例。即使主机上/etc/dse存在,Wasm进程在沙箱内无法访问该路径,因此抛出errno 76(对应WASI的ERROR_NOENT,即文件/目录不存在)的错误。

解决方法

通过wasmtime的--dir参数,将主机上的目标目录挂载到Wasm实例的沙箱中,让实例可以访问该路径:

  • 直接挂载/etc/dse目录到实例的对应路径:
    wasmtime --dir /etc/dse list.wasm
    
  • 如果需要访问整个/etc目录,可挂载整个目录:
    wasmtime --dir /etc list.wasm
    
  • 若需将主机目录映射到实例内的其他路径,可使用源路径:目标路径的格式,例如:
    wasmtime --dir /host/etc/dse:/etc/dse list.wasm
    
    此时Wasm实例访问/etc/dse时,实际对应主机的/host/etc/dse路径。

内容的提问来源于stack exchange,提问作者0x11111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:57:04