Nefunkční webkamera v Dockeřím Octoprintu

Nainstaloval jsem si Raspberry Pi OS (dříve Raspbian – proč to přejmenovali?) s Dockerem a nahrál si Octoprintí kontejner. Základní nastavení yml souboru bylo docela snadné, ale zprovoznit webkameru už ne. Stále dokola se mi nechtělo zobrazit alespoň nějaké okno s chybou, což bylo dost deprimující. Dockeří log (docker-compose logs octoprint) také žádné chyby nezobrazoval. Až po nějaké době experimentování jsem zjistil následující. Jednak je potřeba přidat uživatele pod kterým je Docker spouštěn do skupiny video viz. níže. Uživatel je „pi“, což být nemá, já vím, ale je to jen testovací instalace, kterou mám jen na hraní.

sudo usermod -a -G video pi

Pak je potřeba přidat port 8080 do yml konfiguráku Docker Compose viz. konec článku. Totiž na portu 80 běží samotná instalace Dockerprint a na portu 8080 pak druhý web M-JPEG streamer, který je napojený na webkameru a poskytuje aplikaci video data. Problém je v tom, že se to jen tak nedozvíte. Původně jsem si myslel, že video poskytuje Python, na kterém vše běží, ale není tomu tak. Ještě k tomu jsem zjistil, že v nastavení Webcam & Timelapse je potřeba nastavit stream URL na nějakou konkrétní hodnotu třeba v mém případě:

http://192.168.0.222:8080/?action=stream

Po tomto nastavení již vše funguje 🙂

Můj Docker Compose yml konfigurák:

version: '2.4'

services:
  octoprint:
    image: octoprint/octoprint
    restart: unless-stopped
    ports:
      - 80:80
      - 8080:8080
    devices:
      - /dev/ttyACM0:/dev/ttyACM0
      - /dev/video0:/dev/video0
    volumes:
      - /home/pi/octoprint/prusa_mini:/home/octoprint
      - octoprint:/octoprint
    # uncomment the lines below to ensure camera streaming is enabled when
    # you add a video device
    environment:
      - ENABLE_MJPG_STREAMER=true
    network_mode: "host"
  
  ####
  # uncomment if you wish to edit the configuration files of octoprint
  # refer to docs on configuration editing for more information
  ####

  #config-editor:
  #  image: linuxserver/code-server
  #  ports:
  #    - 8443:8443
  #  depends_on:
  #    - octoprint
  #  restart: unless-stopped
  #  environment:
  #    - PUID=0
  #    - GUID=0
  #    - TZ=America/Chicago
  #  volumes:
  #    - octoprint:/config

volumes:
  octoprint: