Docker容器运行OWFS出现Segmentation fault段错误问题求助
排查思路与解决方案
一、先修正已知配置错误
- 内核模块黑名单配置错误
你在Dockerfile中将ds2490黑名单配置写入容器的/etc/modeprobe.d/,存在两个问题:一是路径拼写错误,正确路径为/etc/modprobe.d/;二是内核模块黑名单仅对宿主机生效,容器共享宿主机内核,该配置放到容器内无任何作用。请直接将ds2490配置文件写入宿主机的/etc/modprobe.d/目录,执行rmmod ds2490 ds9490r wire或重启宿主机确认相关内核模块已卸载。 - 启动脚本语法错误
你的docker_entrypoint.sh内容存在笔误,正确内容应为:
#!/bin/bash owfs -C -uall -m /mnt/1wire --allow_other
- 缺少FUSE设备映射
OWFS依赖FUSE文件系统实现挂载,你当前仅映射了USB设备,未映射FUSE设备,需要在docker-compose.yml中补充配置:
version: "3" services: onewire_parser: container_name: 'onewire' build: . volumes: - /dev/bus/usb:/dev/bus/usb - /dev/fuse:/dev/fuse privileged: true security_opt: - apparmor:unconfined stdin_open: true tty: true restart: unless-stopped
二、基础环境验证
- 宿主机先执行
modprobe fuse确认FUSE内核模块已正常加载 - 容器启动后进入容器执行
lsusb,确认可以识别到DS9490系列1-wire适配器 - 确认owfs参数无重复冲突:你已经在
owfs.conf中配置了usb=all、mountpoint=/mnt/1wire、allow_other,可以直接执行owfs启动,无需额外传参,避免参数冲突触发异常
三、段错误调试方法
如果修正上述配置后仍出现段错误,可通过gdb定位崩溃原因:
- 在Dockerfile中添加gdb安装命令:
RUN apt install gdb -y - 进入容器执行调试命令:
gdb --args owfs -C -uall -m /mnt/1wire --allow_other - gdb交互界面输入
r运行程序,崩溃后输入bt打印栈回溯,即可定位到具体崩溃的代码位置
四、兼容性问题修复
Debian Buster源内置的OWFS版本存在已知的USB设备访问段错误bug,若上述操作无效,可替换基础镜像为ubuntu:20.04,或自行编译最新版OWFS安装使用。
内容的提问来源于stack exchange,提问作者nopact
相关产品推荐
相关产品推荐

