Container Station (CS) & Portainer – CS findet von Portainer erstellte Container nicht

Hallo zusammen,

TL;DR – Kann ich meine Portainer-Container kopieren/sichern und in Container Station erneut bereitstellen? Oder wie kann ich meinen Portainer-Station mit Container Station verbinden?

Im Anschluss an ein früheres Thema habe ich ein neues QNAP TS-264-8G mit 2 x 1TB WD Red SSD [SATA] (RAID1), da ich nach einer neuen Lösung für einen automatisierten Plex Media Server (PMS) suche, wobei PMS auf QTS installiert ist und alle Apps (z.B. *arrs, SabNZBd) als Container laufen.

Als Erstes habe ich PMS installiert und aktualisiert (und mit meinem externen Medienlaufwerk verbunden) – alles gut. Als Nächstes habe ich Container Station zusammen mit Portainer aus dem https://www.myqnap.org/ Repo installiert. Bis hierhin läuft alles gut.

Nun habe ich die Container mit Portainer installiert, indem ich die Images von lscr.io/linuxserver/[z.B. *arr]:latest gezogen und den Standard-Port (mit „Map Additional Port“) sowie die vorgeschlagenen Umgebungen (PUID, PGID, TZ) und Volumes sowie die Restart-Policy eingetragen habe.

Alle Apps funktionieren einwandfrei, kommunizieren miteinander und senden Medien an das externe Plex-Medienlaufwerk – alles bestens. ABER… Wenn ich in CS nachsehe, sehe ich KEINE der Container und wenn ich per SSH „docker ps“ ausführe, wird nichts angezeigt.

Ein Punkt, den ich erwähnen sollte: Als ich die Container in Portainer erstellt habe, habe ich NICHT den „default“-CS-Ordnerpfad verwendet – teilweise, weil dieser sehr lang ist und ehrlich gesagt schien es laut diversen YouTube-Anleitungen empfohlen zu sein. Ist das ein Problem? Die Container laufen ja!

Zur Überprüfung habe ich Container Station verwendet und Bazarr installiert (etwas, das ich nicht nutzen werde), und das funktioniert einwandfrei UND ich sehe diesen Container bei „docker ps“ per SSH, ABER nicht in Portainer!

Meine Frage ist also: Warum kommunizieren diese beiden (CS und Portainer) nicht miteinander? Und kann ich irgendwie meine Container aus Portainer exportieren und in Container Station bereitstellen? Das würde ich bevorzugen, da ich so einer App direkt meinen LAN-Port zuweisen kann (um meine Standard-Bridge-VPN auf QTS zu umgehen).

Ich weiß, das ist ein langer Beitrag, aber ich versuche so viele Infos wie möglich zu geben. Hoffentlich kann mir jemand den richtigen Weg zeigen oder sagen, was ich falsch gemacht habe? Ich möchte die Container wirklich nicht alle neu konfigurieren, wenn es sich vermeiden lässt.

Vielen Dank im Voraus!

EDIT Eine weitere Sache, die mir gerade aufgefallen ist: Als ich Portainer installiert habe, wurden die dokumentierten Startseiten scheinbar übersprungen, sodass alle in Portainer installierten Container in der „Primary“-Umgebung gelandet sind, die „URL:/var/run/system-docker.sock“ auflistet. In einem anderen Beispiel sehe ich jedoch auch eine „Local“-Umgebung mit „/var/run/docker.sock“. Ich vermute, das ist ziemlich wichtig, aber ich habe nie die Option bekommen, diese „Local“-Standalone-Umgebung in Portainer zu erstellen…

Ich denke, deine neue Entdeckung ist wichtig. Soweit ich weiß, benötigen viele QNAP-Dienste Container Station zum Ausführen, aber sie werden nicht in der Container Station-Oberfläche angezeigt. Vielleicht gibt es zwei verschiedene Docker-Umgebungen in QTS. Außerdem denke ich, dass der Entwickler des Portainer-Pakets möglicherweise eine bessere Anlaufstelle für Hilfe ist.

Nach viel Experimentieren (leider habe ich dabei mein QNAP zeitweise gebrickt und musste einen 3-Sekunden-Reset durchführen, um wieder Zugriff zu bekommen) kann ich tatsächlich bestätigen, dass die Standardumgebung (und einzige) „Primary“ mit „…system-docker.sock“ das Problem war. Ich habe eine neue Umgebung erstellt und die Container manuell erneut gebaut, dann mithilfe eines Backups aus der ursprünglichen Konfiguration diese auf dem neuen Container wiederhergestellt. Jetzt funktioniert alles einwandfrei und ich kann den QNAP VPN-Client umgehen (um direkt auf das LAN zuzugreifen). Es hat einiges an Blut, Schweiß und Tränen gekostet, aber ich habe es geschafft (zumindest bisher sieht es gut aus)… Ich werde die Schritte, die ich durchgeführt habe, noch detaillierter dokumentieren, falls jemand anderes das gleiche Problem hat, aber ich habe jetzt eine funktionierende (wenn auch sehr manuelle) Lösung. Danke!

Ich würde behaupten, wenn du wirklich in das *arr-Rabbit-Hole einsteigst, solltest du Portainer verwenden, um deine Container einzurichten.

Erstelle eine Anwendung in CS3+, CS steuert Portainer, und Portainer steuert alles andere. Sachen in CS zu ändern ist nervig, das Mapping von Docker-Befehlen auf CS ist nervig, das Mapping von Docker Compose auf CS ist etwas weniger nervig.

Portainer ist der richtige Ansatz.
(Ich benutze einen Proxy, da alles, womit ich spielen möchte, Zugriff auf die docker.sock haben will, und ich habe keine Lust, Dinge in QNAP zu reparieren, falls eine App/ein Container etwas Dummes mit dem Socket macht.)

networks:
  # Erstelle das untenstehende Netzwerk, bevor du dieses Template ausführst
  external_edge:
    external: true

services:
  portainer:
    networks:
      external_edge:
        ipv4_address: 172.27.1.250
    container_name: portainer-ce
    image: portainer/portainer-ce:latest
    security_opt:
      - no-new-privileges:true
    environment:
      - TZ=America/Toronto
    ports:
      - 9001:8000
      - 9000:9000
      - 9043:9443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:rw
      - /share/Container/portainer-ce/data:/data:rw
    restart: always
  dockerproxy:
    networks:
      external_edge:
        ipv4_address: 172.27.1.251
    container_name: dockerproxy
    image: ghcr.io/tecnativa/docker-socket-proxy:latest
    environment:
#      - PUID=1001
#      - PGID=1000
      - TZ=America/Toronto
      - CONTAINERS=1 # Zugriff auf die Anzeige von Containern erlauben
      - SERVICES=1 # Zugriff auf die Anzeige von Services erlauben (notwendig bei Verwendung von Docker Swarm)
      - TASKS=1 # Zugriff auf die Anzeige von Tasks erlauben (notwendig bei Verwendung von Docker Swarm)
      - POST=0 # Alle POST-Operationen verbieten (effektiv nur Lesezugriff)
    ports:
      - 127.0.0.1:2375:2375
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro # Als read-only eingebunden
    restart: unless-stopped

Oh, und ein Beispiel-Container, den ich anschließend über Portainer starte.

networks:
  # Erstellen Sie das untenstehende Netzwerk, bevor Sie diese Vorlage ausführen
  external_edge:
    external: true

services:
  jellyfin:
    networks:
      - external_edge
    container_name: jellyfin
    image: lscr.io/linuxserver/jellyfin:latest
    deploy:
      resources:
        limits:
          cpus: 3
          memory: 2G
    environment:
      - PUID=1001
      - PGID=1000
      - TZ=America/Toronto
      - DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel
      - JELLYFIN_CONFIG_DIR=/config
      - JELLYFIN_CACHE_DIR=/cache
      - JELLYFIN_PublishedServerUrl=http://TheVault.local #optional
    ports:
      - 8096:8096
      - 8920:8920 #optional
      - 7359:7359/udp #optional
      - 1900:1900/udp #optional
    volumes:
      - /share/docker/appdata/jellyfin/cache:/cache
      - /share/docker/appdata/jellyfin/config:/config # Stellen Sie sicher, dass Ihr lokales Konfigurationsverzeichnis existiert
      - /share/Media Library:/mnt/mediaShare:ro
      # Optional - zusätzliche Schriftarten, die beim Transkodieren mit eingebrannten Untertiteln verwendet werden
      - /usr/share/fonts/:/usr/local/share/fonts/custom:ro
    devices:
      - /dev/dri:/dev/dri
    restart: unless-stopped