文章目录
- [一. 发现问题](#一. 发现问题)
- [二. 解决问题](#二. 解决问题)
一. 发现问题
昨天博主参照官方教程搞了Dify测试用例,想着跑一跑熟悉一下各个组件的作用。结果点运行以后,报了sandbox运行不正常的错误,随后进服务器一看,发现sandbox这个容器在频繁重启。
bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d9992d583c0 langgenius/dify-sandbox:0.2.12 "/main" 2 minutes ago Restart (2) 2 seconds ago
看了看日志,发现容器启动崩溃,出现以下错误:
bash
runtime/cgo: pthread_create failed: Operation not permitted
SIGABRT: abort
PC=0xffffbd067dc0 m=0 sigcode=18446744073709551610
goroutine 0 gp=0x2cf3fa0 m=0 mp=0x2cf4ba0 [idle]:
runtime: g 0 gp=0x2cf3fa0: unknown pc 0xffffbd067dc0
stack: frame={sp:0xfffff0a1d4a0, fp:0x0} stack=[0xfffff021e000,0xfffff0a1d990)
0x0000fffff0a1d3a0: 0x0000ffffbd1e0640 0x0000fffff0a1d830
0x0000fffff0a1d3b0: 0x0000000002cdc000 0x0000000002cf3fa0
0x0000fffff0a1d3c0: 0x0000fffff0a1d400 0x0000fffff0a1d430
runtime: g 0 gp=0x2cf3fa0: unknown pc 0xffffbd067dc0
stack: frame={sp:0xfffff0a1d4a0, fp:0x0} stack=[0xfffff021e000,0xfffff0a1d990)
0x0000fffff0a1d3a0: 0x0000ffffbd1e0640 0x0000fffff0a1d830
0x0000fffff0a1d3b0: 0x0000000002cdc000 0x0000000002cf3fa0
0x0000fffff0a1d590: 0x5d1e3267b19f7f89 0xc018e9598504b33d
goroutine 1 gp=0x40000021c0 m=0 mp=0x2cf4ba0 [running]:
runtime.systemstack_switch()
/home/runner/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.linux-arm64/src/runtime/asm_arm64.s:201 +0x8 fp=0x4000204740 sp=0x4000204730 pc=0x83ba8
runtime.main()
/home/runner/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.linux-arm64/src/runtime/proc.go:172 +0x70 fp=0x40002047d0 sp=0x4000204740 pc=0x48820
runtime.goexit({})
/home/runner/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.3.linux-arm64/src/runtime/asm_arm64.s:1223 +0x4 fp=0x40002047d0 sp=0x40002047d0 pc=0x860d4
二. 解决问题
经过一番折腾,发现这个问题是sandbox在执行任何底层操作时,因为权限不足被系统拒绝,而导致的进程崩溃。
博主这里有两种方法来解决这个问题。
法一:sh脚本启动
添加 --privileged 参数
bash
#!/usr/bin/sh
docker run -d --name dify-sandbox --restart=always --privileged --security-opt seccomp=unconfined --security-opt apparmor=unconfined langgenius/dify-sandbox:0.2.12
法二:docker-compose启动
- docker-compose.yaml中添加 privileged: true 参数。
bash
# The DifySandbox
sandbox:
image: langgenius/dify-sandbox:0.2.12
restart: always
privileged: true
environment:
......
- 使用
docker-compose config --services来查看sandbox对应的服务名称
bash
[root@localhost docker]# docker-compose config --services
ssrf_proxy
plugin_daemon
sandbox
....
- 使用
docker-compose up -d sandbox来启动