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

树莓派4运行RFID-RC522 Docker容器报错求助

树莓派Docker容器中运行RFID-RC522 Python程序报错问题

配置信息

  • 树莓派OS(64位)
  • Docker版本20.10.23
  • Arduino RFID-RC522模块

Python测试程序

#!/usr/bin/env python

import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
reader = SimpleMFRC522()
try:
        id, text = reader.read()
        print(id)
        print(text)
finally:
        GPIO.cleanup()

Dockerfile

#FROM python:3.8-alpine
FROM python:3.8-slim
RUN apt-get update && apt-get install build-essential -y
RUN pip install smbus2
RUN pip install spidev
RUN pip install --no-cache-dir rpi.gpio
RUN pip install mfrc522
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "Read.py"]

构建与运行命令

  • 构建命令:sudo docker build -t read-rfid-python-app .
  • 运行命令:docker run -it read-rfid-python-app

报错信息

Traceback (most recent call last):
  File "Read.py", line 6, in <module>
    reader = SimpleMFRC522()
  File "/usr/local/lib/python3.8/site-packages/mfrc522/SimpleMFRC522.py", line 14, in __init__
    self.READER = MFRC522()
  File "/usr/local/lib/python3.8/site-packages/mfrc522/MFRC522.py", line 130, in __init__
    self.spi.open(bus, device)
FileNotFoundError: [Errno 2] No such file or directory

疑问

  • 是否在Dockerfile中遗漏了安装项?
  • 该问题仅在容器中出现,是否需要配置SPI?

问题解答

核心原因

容器无法访问主机的SPI设备文件,这是默认Docker隔离机制导致的,和Dockerfile的安装项无关——你的Dockerfile已经安装了所有必要的Python依赖。

解决步骤

  1. 确认树莓派主机已启用SPI

    • 运行sudo raspi-config,进入「Interface Options」→「SPI」,选择启用并重启树莓派。
    • 验证主机上存在SPI设备文件:运行ls /dev/spidev*,应看到类似/dev/spidev0.0、/dev/spidev0.1的输出。
  2. 修改Docker运行命令,映射SPI设备并赋予权限
    Docker容器默认没有访问主机硬件设备的权限,需要通过--device参数映射SPI设备:

    sudo docker run -it --device=/dev/spidev0.0 --device=/dev/spidev0.1 read-rfid-python-app
    

    若需要更完整的硬件访问权限(仅在测试或信任容器时使用),可添加--privileged参数:

    sudo docker run -it --privileged read-rfid-python-app
    
  3. 优化Dockerfile(可选)

    • 合并多个pip install命令,减少镜像层:
      RUN pip install --no-cache-dir smbus2 spidev rpi.gpio mfrc522
      
    • 如果requirements.txt已包含上述依赖,可去掉单独的pip install命令,避免重复安装。

补充说明

  • 映射设备后,容器内会自动创建对应的/dev/spidev*文件,程序即可正常访问。
  • 若仍有权限问题,可将容器进程加入主机的spi用户组:
    sudo docker run -it --device=/dev/spidev0.0 --device=/dev/spidev0.1 --group-add spi read-rfid-python-app
    

内容的提问来源于stack exchange,提问作者Mark Stone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:05:18