Can't access GPIO on Python from Docker container on Raspberry Pi 5

65 views Asked by At

I tried to access from docker container, following docker files.

I used gpiozero (or libgpiod) because of can't use RPI.GPIO by modified GPIO access rule.

Despite what I did bind /dev/gpiomem0 , I got the error.

Traceback (most recent call last):
  File "/app/led.py", line 4, in <module>
    led = LED(25)
          ^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/gpiozero/devices.py", line 108, in __call__
    self = super().__call__(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/gpiozero/output_devices.py", line 192, in __init__
    super().__init__(pin, active_high=active_high,
  File "/usr/local/lib/python3.11/site-packages/gpiozero/output_devices.py", line 74, in __init__
    super().__init__(pin, pin_factory=pin_factory)
  File "/usr/local/lib/python3.11/site-packages/gpiozero/mixins.py", line 75, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/gpiozero/devices.py", line 544, in __init__
    super().__init__(pin_factory=pin_factory)
  File "/usr/local/lib/python3.11/site-packages/gpiozero/devices.py", line 245, in __init__
    Device.ensure_pin_factory()
  File "/usr/local/lib/python3.11/site-packages/gpiozero/devices.py", line 270, in ensure_pin_factory
    Device.pin_factory = Device._default_pin_factory()
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/gpiozero/devices.py", line 317, in _default_pin_factory
    return ep.load()()
           ^^^^^^^^^
  File "/usr/local/lib/python3.11/importlib/metadata/__init__.py", line 202, in load
    module = import_module(match.group('module'))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/local/lib/python3.11/site-packages/gpiozero/pins/rpigpio.py", line 10, in <module>
    from RPi import GPIO
ModuleNotFoundError: No module named 'RPi'
  • Dockerfile
FROM python:3.11-slim

RUN apt update -y && apt upgrade -y && apt install git vim -y

# GPIO
RUN pip install --break-system-packages gpiozero
  • docker-compose.yml
services:
    gpio:
       build: .
       stdin_open: true
       tty: true
       container_name: gpio
       cap_add:
           - SYS_RAWIO
       privileged: true
       devices:
           - /dev/gpiomem
           - /dev/gpiomem0
           - /dev/gpiochip0
           - /dev/gpiochip4
           - /dev/gpio
       command: bash
  • sample.py
from time import sleep
from gpiozero import LED

led = LED(25)

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)
0

There are 0 answers