树莓派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依赖。
解决步骤
确认树莓派主机已启用SPI
- 运行
sudo raspi-config,进入「Interface Options」→「SPI」,选择启用并重启树莓派。 - 验证主机上存在SPI设备文件:运行
ls /dev/spidev*,应看到类似/dev/spidev0.0、/dev/spidev0.1的输出。
- 运行
修改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优化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
相关产品推荐
相关产品推荐

