Docker mit Plex als 2. Instanz auf einem Server

Hallo.
Hat jemand von euch auf einem Server eine 2. Plex instanz via Docker zum laufen gebracht?
Docker mit Plex bekomme ich zwar zum laufen, allerdings nur dann wenn ich zuvor die native Plex App auf dem Server stoppe. Beide gleichzeitig bekomme ich auf Teufel komm raus einfach nicht hin.
Als Create habe ich das hier benutzt:

sudo docker create
–name=mediathek2 \ (mediathek1 ist die native Plex Version)
–restart=always
–network=host
-p 42400:32400/tcp \ (hier soll Docker Plex mit 42400 laufen)
-e VERSION=latest
-e PUID=1001 -e PGID=1001
-e TZ=Europe/Berlin
-e PLEX_CLAIM=“claim-bla”
-e ADVERTISE_IP=“IP:32400” \
-v /home/docker/plex/config:/config
-v /home/meine/videos:/videos
linuxserver/plex

In Docker Plex habe ich in den Server Einstellungen den Port 42400 eingetragen.
Als Test habe ich einen Ordner eingescannt. Zugriff von Außen funktioniert hier einwandfrei.
Was mich dann etwas verwirrt ist, dass ich via “netstat | grep 42400” diesen Port nicht finde, 32400 dagegen schon.
Wenn ich jetzt die native Plex Version starte (service plexmediaserver start) bleibt die Off, also kein Zugriff, nichts. Nur wenn ich Docker beende, dann lässt sich die native Plex Instanz starten.
Meine Vermutung ist, das liegt irgendwo an den Ports, die noch richtig “eingestellt” werden müssen.
Muss dazu aber sagen, dass ich kein Profi bin was das Portforwarding & Co angeht.

Vielleicht hat hier einer eine Idee wie ich das ganze realisieren kann, so dass beide Plex Instanzen laufen.
Für jeden Tip bin ich dankbar.

Wenn der Docker-Container gestartet ist und du dann den Plex-Service startest, was sagt dann

service plexmediaserver status

?

Wie greifst du denn auf das Webinterface der Docker-Instanz zu?
IP:32400/manage oder
IP:42400/manage

Hab keine Ahnung von Docker, aber du hast bei
-e ADVERTISE_IP
wieder die 32400 drin stehen. Müsste da nicht auch 42400 dann drin stehen?

Das hier:

root@Ubuntu-1710-artful-64-minimal ~ # service plexmediaserver status
● plexmediaserver.service - Plex Media Server for Linux
Loaded: loaded (/lib/systemd/system/plexmediaserver.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2019-02-07 13:22:14 CET; 35s ago
Process: 28140 ExecStart=/bin/sh -c LD_LIBRARY_PATH=/usr/lib/plexmediaserver “/usr/lib/plexmediaserver/Plex Media Server” (c
Process: 28131 ExecStartPre=/bin/sh -c /usr/bin/test -d “${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}” || /bin/mkdir -p "${P
Main PID: 28140 (code=exited, status=255)
CPU: 286ms

Feb 07 13:22:09 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Main process exited, code=exited, status=25
Feb 07 13:22:09 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Unit entered failed state.
Feb 07 13:22:09 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Failed with result ‘exit-code’.
Feb 07 13:22:14 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Service hold-off time over, scheduling rest
Feb 07 13:22:14 Ubuntu-1710-artful-64-minimal systemd[1]: Stopped Plex Media Server for Linux.
Feb 07 13:22:14 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Start request repeated too quickly.
Feb 07 13:22:14 Ubuntu-1710-artful-64-minimal systemd[1]: Failed to start Plex Media Server for Linux.
Feb 07 13:22:14 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Unit entered failed state.
Feb 07 13:22:14 Ubuntu-1710-artful-64-minimal systemd[1]: plexmediaserver.service: Failed with result ‘exit-code’.
lines 1-17/17 (END)

Da bin ich mir auch nicht ganz sicher. 32400 ist ja der Port der nach außen erreichbar sein muss. Ich kanns aber gerne mit 42400 probieren.

Ich hab auch mal versucht micht da einzulesen, aber bin nicht schlauer draus geworden…
Mit -p gibt man Ports an HostPort:ContainerPort. Bei dir am Host 42400 und im Container dann 32400. Aber welchen man dann davon in die ADVETISE_IP angeben soll, hab ich nicht wirklich rauslesen können.

Ich hab mir nochmal die Readme angeschaut, die man hier finden kann:

Bevor man loslegt, sollte man wissen welchen Typ vom Netzwerk man auswählen soll.

  • Bridge (Default)
  • Host
  • Macvlan

Macvlan fällt für mich flach.
Host fällt auch flach, da das eine Version ist wenn man nur Plex im Docker Container nutzt.
Für mich bleibt also nur die Bridge Version übrig. Und hier fallen mir ein paar Unterschiede auf, zwischen das was ich eingebe und was dort steht.

Ein

–network=host \

so wie es zum laufen gebracht habe, ist hier nicht notwendig.
Dafür werden aber alle Ports eingetragen.
Bei Advertise_IP steht:

This variable defines the additional IPs on which the server may be be found

Mit anderen Worten, auf wecher IP der Server gefunden wird. Was den Port betrifft, da muss ich noch rätseln. Testweise könnte ich aber beide nehmen. Also einmal 42400 oder 32400.

Und als letzter Punkt kommt noch:

-h HOSTNAME \

In der Erklärung steht, dass der Hostname im Container damit definiert wird. Als Bsp wurde hier PlexServer genannt. Ich werde als Test mal PlexServer_2 nutzen. Nur um damit auszuschließen, dass sich die beiden Instanzen nicht deswegen anzicken.

Desweiteren hatte ich noch ein Gespräch mit einem Kollegen von hier, allerdings drüben im englisch sprachigen Bereich. Er hatte von einem Docker Experten sich folgende Info geben lassen:

His instructions made it completely clear. ALL the ports need to be bumped up.
TCP: 32400 (for access to the Plex Media Server) [required] ( ports 32400 → 32412 )
UDP: 1900 (for access to the Plex DLNA Server)
TCP: 3005 (for controlling Plex Home Theater via Plex Companion)
UDP: 5353 (for older Bonjour/Avahi network discovery)
TCP: 8324 (for controlling Plex for Roku via Plex Companion)
UDP: 32410, 32412, 32413, 32414 (for current GDM network discovery)
TCP: 32469 (for access to the Plex DLNA Server)
Add 10,000 to each and include in the container specification.

weiter schreibt er:

He defines the other ports at the higher port numbers so PMS can run. Only 32400, 42400, 52400, and 62400 are port forwarded to the router. There is 65,536 possible ports.

Das verstehe ich nicht ganz. Er definiert die anderen Ports auf einer höheren Nummer, damit Plex laufen kann. Okay, aber 32400, 42400, 52400 und 62400 müssen beim Router zusätzlich weitergeleitet werden?

Ich hatte dann folgendes Beispiel gezeigt:

65001:32400/tcp
65002:1900/udp
65003:3005/tcp
65004:5353/udp
65005:8324/tcp
65006:32410/udp
65007:32412/udp
65008:32413/udp
65009:32414/udp
65010:32469/tcp

Als Antwort kam das:

In that setting, you only need 65001. The other ports are not intended for open internet. They are a security risk.

Also brauche ich nur den einen Port (65001:32400/tcp) definieren, und das wars?

Demnach müsste das dann also so aussehen:

docker run
-d
–name=mediathek2
-p 65001:32400/tcp
-e TZ=Europe/Berlin
-e PLEX_CLAIM=“claim-bla”
-e ADVERTISE_IP=“IP:65001” \ (oder halt 32400, kann beides testen)
-h PlexServer_2
-v /home/docker/plex/config:/config
-v /home/meine/videos:/videos
linuxserver/plex

In der Firewall habe ich die 65001 über tcp auch drin.

Was Du denkst Konfiguriert zu haben =! ist das was Du tatsächlich konfiguriert hast: --network=host sticht -p 42400:32400/tcp

Entweder verwendest du den Parameter –network=host und bindest ALLE Ports des Containers an das Host-Interface, ODER du verwendest -p 42400:32400/tcp um einen (oder mehr) einzelnen Port vom Host in den Container zu mappen. Letzteres ist dann implizit --network=bridge.

Wichtig:

  • beide Instanzen dürfen nicht dasselbe Config-Verzeichnis verwenden
  • Falls Du für den Container eine Kopie deins Konfig-Verzeichnisses verwenden willst, lösch vor dem ersten Start die Preferences.xml in dem Verzeichnis für die Container-config.
  • Warum nimmst Du nicht das offiziele Plex Docker-Image?

Update: Dein letzter Docker run sieht doch gut aus, solange IP die von Deinem Docker-Host ist.

Also schreibe ich --network=bridge anstatt --network=host?
Denn das mit network-bridge steht in der Readme nicht mit drin.
Später hab ich selbst gemerkt dass network=host Käse ist und die Ports damit zunichte macht.

Wenn ich den Port 42400 für Docker nutzen möchte, setze ich diesen Port am Anfang oder am Ende? Also 42400:32400/tcp oder 32400:42400/tcp?
Und bei Advertise IP, welchen Port dahinter? 32400 oder 42400?

Dürften die beide eigentlich nicht haben.
Da ich mir sagen lassen habe, was links ist, ist der Quellpfad und rechts das Ziel, also für Docker.
Mit “/home/docker/plex/config:/config” sollte ich aber eine neue Config erstellen, und eben nicht eine Kopie der bereits vorhanden Plex Instanz sein. Ich hoffe hier hab ich es richtig gemacht.
Die 2. Instanz soll komplett neu aufgebaut werden, also mit neu angelegten Ordnern.

Ich habe im Netz nach eine Lösung gesucht, weil der 1. Versuch fehlschlug. Die gefunden Anleitung hat zumindest soweit funktioniert, dass ich es wenigstens starten konnte. Und damit war ich einen Schritt weiter.
Wenn du mir in kurzen Sätzen sagen könntest, wie ich das Plex Docker-Image nutze, dann kann ich das auch gerne versuchen.
Ich hänge aber momentan an den Ports bzw. der Dockerconfig. Wenn ich diesen Schritt bewältigen kann, dann sollte es eigentlich gewesen sein.

Um von Außerhalb auf Docker Plex zugreifen zu können, müssen dafür alle Ports gemappt werden, oder reicht nur die 32400?

Danke für dein Support.

Interesse halber: was versuchst du eigentlich zu erreichen mit der zweiten Server Instanz auf dem selben Rechner?

Dass ich u.a. getrennte Ordner habe.

Was wird wovon getrennt?

Das mit --network=bridge steht in der Anleitung nicht, weil es das Standardverhalten ist und das Angeben oder komplett weglassen dasselbe Resultat hat.

Bei -p und -v gilt für die Werte immer: Host-Seite:Container-Seite

Sprich bei dir dementsprchend -p 42400:32400 (tcp wird implizit immer verwendet wenn nicht udp angegeben ist, du kannst es aber auch explizit angeben wenn Du dich damit wohler fühlst)

Advertise IP = Docker-Host-IP:Host-Port.

Du weisst schon das auf der Dockerhub-Seite von plexinc/pms-docker alles beschrieben ist, was Du brauchst um es zu betreiben, oder?

Einige -e Variablen heissen anders, sonst ist es fast identisch zu benutzen… Das Tag plexinc/pms-docker:plexpass überprüft beim Container-Start immer ob eine neue Plex Version vorliegt und aktuallisiert diese ggf.

Im Router musst Du auf Docker-Host-IP:Host-Port forwarden.

Ich möchte manche Ordner auf einer 2. Instanz haben, anstatt auf der 1. Instanz.
Und später möchte ich einen 2. Admin im Container haben. Aber erstmal versuche ich das zum laufen zu bringen.

Ich versuch mich da gerade reinzufuchsen.
Über die Suche habe ich das hier gefunden, zwar Port 80 wegen Apache aber ich könnte das ja durch 32400 austauschen. Und bei mir ist es 172.17.0.2, nicht .0.3:

Let’s deploy IPTables for Docker Container IP Address: 172.17.0.3

#iptables -t nat -A POSTROUTING --source 172.17.0.3 --destination 172.17.0.3 -p tcp --dport 80 -j MASQUERADE

#iptables -t nat -A DOCKER ! -i docker0 --source 0.0.0.0/0 --destination 0.0.0.0/0 -p tcp --dport 80 -j DNAT --to 172.17.0.3:80

#iptables -A DOCKER ! -i docker0 -o docker0 --source 0.0.0.0/0 --destination 172.17.0.3 -p tcp --dport 80 -j ACCEPT

Check IPTables with below command.

#iptables -S DOCKER| grep 172.17.0.3
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT

#iptables -t nat -S DOCKER| grep 172.17.0.3
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.3:80

#iptables -t nat -S POSTROUTING| grep 172.17.0.3
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 80 -j MASQUERADE

Wenn ich das bei mir anweden will, würde ich es so eintragen:
#iptables -S DOCKER| grep 172.17.0.2 - EINS
$iptabels -A DOCKER -d 172.17.0.2/32 !-i docker0 -o docker0 -p tcp -m tcp --dport 32400 -j ACCEPT

#iptables -t nat -S DOCKER| grep 172.17.0.2 - ZWEI
$iptabels -A DOCKER ! -i docker0 -p tcp -m tcp --dport 32400 -j DNAT --to-destination 172.17.0.2:32400

#iptables -t nat -S POSTROUTING| grep 172.17.0.2 - DREI
$iptables -A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 32400 -j MASQUERADE

Eins & Zwei werden nach einem Restart der Firewall nicht erkannt:
-A: command not found
Das kann jetzt auch mti der Firewall zusammenhängen, aber wären die Regeln denn soweit in Ordnung?

Denn die Fehlermeldung seitens Docker kommt immer noch:
root@Ubuntu-1710-artful-64-minimal ~ # docker start mediathek2
Error response from daemon: driver failed programming external connectivity on endpoint mediathek2 (3f77a71c4e7c1f06e2e3aa2b3f34081374a84d77f272068d44bd4a6fc3bc42e1): (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 32400 -j ACCEPT: iptables: No chain/target/match by that name.
(exit status 1))
Error: failed to start containers: mediathek2

Nur um Sicher zu sein, sollten wir erstmal abgleichen das wir die Begriffe identisch verwenden:
Router = Internet-Router, in der Regel eine Fritzbox oder vergleichbares (bei dir ein Linux Rechner mit IP-Tables?!!)
Docker-Host-IP = IP des Rechners auf dem Docker installiert ist
Host-Port = Port auf dem Rechner auf dem Docker installiert ist (frei wählbar, solange nicht schon belegt).
Container-Port = Port im Container (bei Plex immer 32400)
Docker-Container = Laufzeit-Ausprägung eines Docker-Images.

Container im Bridge-Mode sollten IMMER über die IP des Hosts und des beim Port-Mapping verwendeten Host-Ports angesprochen werden! Alles andere fällt unter “kann man so machen, ist dann aber scheisse”.

Solange ich Dein Setup (Internet -> ? -> ? -> Docker-Container) nicht kenne, kann ich dir nich weiterhelfen.

PMS läuft bei mir auf einem Dedicated Server. Nichts lokales bei mir Zuhause.
So gesehen muss das Portforwarding mittels iptabels geregelt werden. Andere Möglichkeiten kenne ich jetzt nicht. Gut, auf dem WebInterface vom Server kann ich unter Firewall Regeln einstellen, diese würden aber meine jetzige Firewall obsolet machen. Aber so würde es im WebIf aussehen:

Ist quasi die IP des Server. 147.111.222… usw.

Für mein Verständnis heißt das, das ist der Port auf dem Server wo Plex ja bereits läuft. Also 32400.

Dieser Port ist doch der Port, dem ich Docker zuweise? Also 65001?

Als Bsp damit ich das richtig verstehe:
User von Außen → Server. Plex nativ ganz normal erreichbar über 32400. Netwerk (lt. ifconfig) enp2s0.
User von Außern → Server → Docker → Plex.
Hier muss der Server den Port 32400 von enp2s0 zusätzlich an/über die Bridge docker0 weiterleiten, an Port 65001. Somit wäre Docker nach außen erreichbar. Soweit richtig, oder komplett fehlgeschlagen?

Internet → Dedicated Server (Plex, 32400). Docker habe ich über die genannte Tutorialseite installiert. Und als Netzwerkschnittstelle läuft docker0, inet 172.0.0.1.

Das Docker Image scheint ja in Ordnung zu sein, da ich es ja Testweise als net=host probiert habe. (Zuvor die native Plex App deaktiviert). In den Plex Settings dann den Port 65001 zugewiesen. Plex wurde dann als Indirekt erkannt und von außern wunderbar erreichbar gewesen.

Nur dass mit den Portforwarding muss ich noch hinbiegen. Mache das aber zum ersten mal und fuchse mich nur langsam rein.

Du hast ein ganz schön verbogenes Verständnis davon wie Docker funktioniert… und verkomplizierst die Sache ganz schön.

Warum schreibst Du das mit dem VPS nicht schon im ersten Thread, dann hätte ich NIE etwas von einem Router geschrieben. Dir ist die Defintion vom Container-Port immer noch NICHT klar!

Wenn Du den Container mit -p 65001:32400 erzeugst, dann ist der Host-Port 65001 und der Container-Port 32400.

Danach kannst Du über http://147.111.222.?:65001 auf den Container zugreifen! Docker regelt den Rest für Dich und verbiegt auch iptables so wie es notwendig ist. Es bohrt dir sogar port 65001 auf dem Interface enp2s0 frei, so dass er auch von aussen erreichbar ist (Docker ist leider so dreisst!).

Ich verstehe nicht warum Du weiterhin versucht zwanghaft auf die Container-IP und den im Container verwedeten Port zuzugreifen. So wird das nicht gemacht!

Ich bin dann mal raus… Viel Erfolg mit Deinem Container!

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.