cAdvisor auf Synology

Die Ausführung von cAdvisor in Docker auf Synology war eine Herausforderung, da es oft nicht startete, obwohl keine Änderungen an den Startoptionen vorgenommen wurden. Das Problem stellte sich als ein Zusammenhang mit den inotify-Einstellungen heraus.

Das Problem

Beim Ausführen des folgenden Befehls zum Starten von cAdvisor:

docker run --name=cadvisor \
  --volume="/:/rootfs:ro" \
  --volume="/var/run:/var/run:ro" \
  --volume="/sys:/sys:ro" \
  --volume="/var/packages/ContainerManager/var/docker/:/var/lib/docker:ro" \
  --security-opt no-new-privileges=true \
  --restart=on-failure:5 \
  google/cadvisor:latest --docker_only=true
cadvisor:
  image: gcr.io/cadvisor/cadvisor:latest
  container_name: cadvisor
  read_only: true
  security_opt:
    - no-new-privileges=true
  command:
    - "--docker_only=true"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/packages/ContainerManager/var/docker/:/var/lib/docker:ro
  restart: on-failure:5

trat der folgende Fehler auf:

F0701 00:00:00.000000       1 cadvisor.go:156] Failed to start container manager: inotify_add_watch /sys/fs/cgroup/cpu: no space left on device

Dieser Fehler wurde durch eine unzureichende Anzahl an inotify-Überwachungen verursacht.

Die Lösung

Um dieses Problem zu beheben, habe ich den Synology Task Scheduler verwendet, um den Wert von max_user_watches beim Start festzulegen:

  1. Öffnen Sie den Task Scheduler in Synology DSM.

  2. Erstellen Sie ein neues Benutzerdefiniertes Skript.

  3. Setzen Sie die Aufgabe auf Startup.

  4. Fügen Sie im Skriptfeld den folgenden Befehl ein:

    sysctl fs.inotify.max_user_watches=104857
    
  5. Speichern Sie die Aufgabe.

Dadurch wird sichergestellt, dass das inotify-Watch-Limit bei jedem Start der Synology NAS erhöht wird, wodurch das Problem mit cAdvisor verhindert wird. Diese einfache Lösung behob das Problem und ermöglichte es, dass cAdvisor problemlos auf meiner Synology NAS läuft.