树莓派Docker部署HomeAssistant访问USB设备出现PermissionError权限错误求助
排查与解决步骤
问题根因:Docker容器内运行HomeAssistant的非root用户,未获取到宿主机串口设备
/dev/ttyUSB0的读写权限
- 第一步:确认宿主机串口设备的权限归属
在树莓派终端执行命令:
正常输出格式类似ls -l /dev/ttyUSB0crw-rw---- 1 root dialout 188, 0 6月 12 22:00 /dev/ttyUSB0,默认串口设备归属dialout用户组,组内用户拥有读写权限 - 第二步:将宿主机运行容器的普通用户加入dialout组
执行以下命令替换对应用户名,将用户加入串口设备组:
执行完成后重启树莓派或重新登录用户,使权限配置生效sudo usermod -aG dialout 你的普通用户名 - 第三步:检查Docker启动配置的设备挂载与权限参数
如果你使用docker run命令启动容器,需要确保启动参数包含设备挂载与组权限添加配置:
如果你使用docker-compose编排,需要在HomeAssistant对应的service配置下添加以下字段:docker run 其他原有参数 --device /dev/ttyUSB0:/dev/ttyUSB0 --group-add dialout 镜像名
修改配置后重启容器生效devices: - /dev/ttyUSB0:/dev/ttyUSB0 group_add: - "dialout" - 第四步:临时验证权限问题
可以先执行临时权限开放命令验证问题根因:
重启容器后如果DSMR集成可以正常连接,即可确认是权限配置问题,该临时配置重启设备后会失效,不可作为长期方案使用sudo chmod 666 /dev/ttyUSB0 - 可选优化:固定串口设备名
树莓派重启后可能出现USB串口设备编号漂移的问题,可编写udev规则为你的Slimme meter设备固定专属设备名,避免挂载错误
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

