Java Minecraft Server 1.20 auf Raspberry Pi 4 mit Docker installieren


Minecraft Server mit Docker auf Raspberry Pi 4

Der Raspberry Pi ist nach wie vor die günstigste Möglichkeit, um schnell einen lokalen Minecraft Server für zu Hause aufzusetzen. Alternativ kann man auch ein Synology NAS als Minecraft-Server nutzen. Nachdem es aus meiner Sicht lange Zeit keine Möglichkeit gegeben war, einen Java Server stabil auf einem Pi zu betreiben, gibt es nun eine saubere Lösung mit Docker.

Warum Docker auf dem Pi 4?

Docker ist keine Virtualisierung wie zum Beispiel VMWare, sondern eine abstrahierte Containerisierung vom Host-Betriebssystem, mit begrenztem Zugriff auf die zugrunde liegenden Ressourcen. Container nutzen isolierte Prozesse und benötigen keinen Hardware-Hypervisor. Dies sorgt für eine vergleichbare Leistung wie eine native Installation. Die Nutzung von Docker für den Minecraft Server auf dem Pi löst ferner eine ganze Reihe von Herausforderungen.

  • Einfache und schnelle Installation
  • Rasantes Starten des Servers
  • Automatische Aktualisierung
  • Sichere Kapselung der System-Umgebung
  • Optimale Java-Version und Konfiguration
Raspberry Pi 4 mit 1.5GHz Quadcore (kaufen)

Was braucht man dafür?

  1. Einen Raspberry Pi 4 mit 4 GB RAM – günstig kaufen
  2. Ein USB-C Netzteil für den Pi4 – nicht sparen!
  3. Eine schnelle (!) micro SD-Karteauch nicht sparen!
  4. Ein schönes Gehäuse für den Pi4 – günstig kaufen
  5. Optional: ein Synology NAS für Backups – kaufen
SSH aktivieren im Raspberry Pi Imager

Schnellstart

Wenn ihr keine Lust habt ein langes Tutorial zu lesen, dann installiert Raspberry Pi OS LITE (64-Bit) und aktiviert den SSH Zugang. Das ist in Schritt 1 bis 3 beschrieben. Dann führt ihr diesen Befehl auf der Shell des Pi aus:

curl -fsSL https://getmc.marc.tv/ -o install-pi-docker-minecraft.sh 
chmod +x install-pi-docker-minecraft.sh 
./install-pi-docker-minecraft.sh

Der Code ist selbstverständlich auf GitHub zu finden. Die URL getmc.marc.tv leitet auf das Installationsscript auf GitHub weiter.

Video-Anleitung

YouTube Anleitung für die Installation

Schritt-für-Schritt-Anleitung

Wer verstehen will, was hier passiert, der kann alles in Ruhe der Reihe nach installieren und dabei nachvollziehen.

1: Installation von Raspberry Pi OS LITE (64-Bit)

  1. Lade das Programm Raspberry Pi Imager herunter und starte es.
  2. Wähle Raspberry Pi OS LITE (64-bit) unter „Raspberry Pi OS (other)“ aus. Wichtig: 64-Bit und Lite.
  3. Klicke auf das Zahnradsymbol im Raspberry Pi Imager und aktiviere SSH.
  4. Lege dort einen Benutzernamen und Passwort fest:
    Benutzername: pi
    Passwort: [selber ein sicheres Passwort vergeben]
  5. Schreibe das so konfigurierte Image auf eine schnelle SD-Karte.
  6. Stecke die beschriebene SD-Karte in den Pi.
  7. Verbinde den Raspberry Pi 4 über ein Ethernet-Kabel mit dem Router.
  8. Stecke das Stromkabel in den Raspberry Pi.
  9. Warte drei Minuten, bis Raspberry Pi OS LITE (64-Bit) hochgefahren ist.

2. Öffnen einer Shell

Wir benötigen zur Installation einen Computer im selben Netzwerk.

  • Windows: Installiere und starte Putty
  • macOS: Starte die Terminal App
  • Linux: Nutze die Shell

MacOS und Linux bringen die Shell schon mit. Bei Windows muss diese nachinstalliert werden.

3. Per Terminal über SSH mit dem Pi verbinden

Verbinde dich mit diesem Befehl in der Shell per SSH mit dem Pi. Das Passwort wurde in Schritt 1.3 festgelegt.

ssh pi@raspberrypi.local

Wenn „raspberrypi.local“ als Adresse nicht funktioniert, finde die IP-Adresse deines Raspberry Pi im Netzwerk über den Router heraus.

ssh pi@[IP-Adresse des Raspberry Pi]

Jetzt teste jetzt mit dem folgenden Befehl, ob das Ergebnis aarch64 ist. Wenn nicht, liest die Anleitung bis hierhin noch einmal genau durch.

uname -m

3. Aktualisieren aller Pakete

Damit wir auch auf dem neusten Stand sind, werden nun alle Programme auf dem Pi auf den neusten Stand gebracht. Es wird automatisch alles ohne Rückfrage installiert. Dafür nutzt man diesen Befehl.

sudo apt update && sudo apt upgrade --yes
sudo reboot now

Der letzte Befehlt ist ein Neustart des System.

4. Installation von Docker unter Pi OS

Kopiert die folgenden Befehle in die Shell und drückt Enter. Sie werden nacheinander ausgeführt.

cd
mkdir mcserver
curl -fsSL https://get.docker.com -o get-docker.sh
chmod +x get-docker.sh 
./get-docker.sh 
sudo apt-get install -y uidmap
dockerd-rootless-setuptool.sh install
sudo usermod -aG docker $USER
sudo systemctl enable docker
newgrp docker

Erklärung der Befehle

  1. Zuerst erstellen wir den Ordner für alle Daten des Servers.
    mkdir mcserver
  2. Wechseln ins Home-Verzeichnis /home/pi
    cd
  3. Lade das Docker-Installationsskript runter
    curl -fsSL https://get.docker.com -o get-docker.sh
  4. Mache das Installationsskript ausführbar
    chmod +x get-docker.sh
  5. Nun installierte Docker (dauert einige Minuten)
    ./get-docker.sh
  6. uidmap wird für einen rootless-Betrieb benötigt.
    sudo apt-get install -y uidmap
  7. dockerd-rootless-setuptool.sh installieren
    dockerd-rootless-setuptool.sh install
  8. Starte Docker nach einem Neustart automatisch
    sudo systemctl enable docker
  9. Nun fügen wir den Nutzer pi zu der Gruppe Docker hinzu.
    sudo usermod -aG docker $USER
  10. Zum Schluss wechseln wir in die Docker-Gruppe
    newgrp docker
Kurz vor dem großen Moment der Docker-Installation auf dem Pi.

5. Minecraftserver über Docker starten

Mit folgendem Befehl wird der Minecraftserver im Docker Container auf dem Raspberry Pi gestartet:

sudo docker run -d \
--restart unless-stopped \
--name mcserver \
-e MEMORYSIZE='1G' \
-e PAPERMC_FLAGS='' \
-v /home/pi/mcserver:/data:rw \
-p 25565:25565 \
-it marctv/minecraft-papermc-server:latest

Erklärung des Befehls

  • docker mit root-Rechten starten. Klappt sonst nicht ohne Neustar.t
  • Automatischer Neustart
  • Name: mcserver
  • Arbeitsspeicher im Container: 1 GB. Das kann bei einem Pi mit 4 GB auch 2 oder gar 3 GB sein.
  • PaperMC Parameter sind bewusst leer
  • Speicherort aller Dateien auf dem Pi: /home/pi/mcserver
  • Port im Container und nach außen ist 25565
  • Image des Containers ist: marctv/minecraft-papermc-server
  • Tag: „latest“ ist immer die neuste, stabile Version.

6. Kommandozeile und Logs des Servers

Es dauert eine Weile, bis der Server zum ersten Mal startet. Um sich das anzuschauen, öffnen wir das Log. Zum Verlassen, drücke Strg-C.

docker logs mcserver --follow

Der Server ist erst vollständig gestartet, wenn du die Meldung „Timings Reset“ siehst. Ein „Can’t keep up! Is the server overloaded? Running 5296ms or 105 ticks behind“ ist beim ersten Starten normal, weil die Chunks erst generiert werden müssen. Um sich mit der interaktiven Kommandozeile des Servers zu verbinden, nutzt man folgenden Befehl:

docker attach mcserver

Dort kann man Befehle wie /allowlist oder /op ausführen. Um diese Ansicht zu verlassen, drücke Strg-P, gefolgt von Strg-Q.

7. Auf dem Server spielen

Stelle sicher, dass der Server in Schritt 6 vollständig hochgefahren ist. Zu guter Letzt starten wir Minecraft Java-Edition. Dort fügen wir unter „Multiplayer“ einen Server hinzu. Die Server-Adresse ist dieselbe, mit der wir uns per SSH verbinden:

raspberrypi.local 

Als Alternative nutzen wir die IP-Adresse des Raspberry Pi im Netzwerk.

Minecraft auf dem Raspberry Pi mit Docker

8. Automatische Aktualisierungen einrichten

Damit man nicht manuell von 1.20 auf 1.21 aktualisieren muss, richten wir Watchtower ein. Das ist ebenfalls ein Docker Container, die andere Container aktuell hält.

docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower

Mit dem folgenden Befehl können wir uns anschauen, welche Container gerade laufen:

sudo docker ps

Die Ausgabe sollte den Minecraft Server Container und den Watchtower Container zeigen. Der erste Versuch einer Aktualisierung findet erst nach 24 Stunden nach der Ersteinrichtung oder auch nach einem Neustart statt.

9. Freigabe des Servers über das Internet

Ich nutze eine Fritzbox. Dort kann man unter den Einstellungen Internet > MyFritz-Konto eine Adresse einrichten, über die man die Fritzbox außerhalb des eigenen Netzwerks erreichen kann.

Unter Internet > Freigaben > Gerät für Freigaben hinzufügen > [Gerät auswählen] > Neue Freigabe > MyFritz Freigabe > Andere Anwendung und dort den Port „25565“ für TCP und UDP freigeben.

Die MyFritz-URL ist dann die Server-Adresse, die man in Minecraft einträgt. Zum Beispiel u5xvqz2trolololom.myfritz.net Mein Server läuft durch einen SRV-Eintrag in meine DNS-Einstellungen der Domain hier mc.marc.tv

Fazit und Ausblick

Der Wechsel auf Docker auf dem Raspberry Pi macht den Betrieb des Servers kinderleicht. In den Tests ist die Leistung des Minecraftservers vergleichbar mit Docker auf dem Synology NAS. Somit ist die Performance besser als die native Installation ohne Docker auf dem Pi durch die höhere Java-Version und bessere Optimierung der Umgebung. Die Entkopplung des Raspberry Pi OS von der Serverumgebung sorgen für eine einfache Administration. Zudem nutzten nun alle meine Anleitungen dasselbe Docker-Image. Das erlaubt mir eine fokussierte Weiterentwicklung. Ich bin gespannt auf eure Rückmeldungen und Kommentare.


Beitrag veröffentlicht

in

von

Kommentare

96 Antworten zu „Java Minecraft Server 1.20 auf Raspberry Pi 4 mit Docker installieren“

  1. Avatar von Mika Kreis
    Mika Kreis

    Hey Marc, ich finde dein Tutorial wirklich super! Kannst du auch eine Anleitung für einen stabilen Pocket Edition 1.19.21 Server schreiben, so dass z.B. mein Schul-Freund, der auch Marc heißt, mit mir spielen kann?
    LG Mika

    1. Avatar von Mika Kreis
      Mika Kreis

      Ausserdem bekomme ich „Permission Denied“, wenn ich Watchtower installieren möchte.

    2. Avatar von Marc
      Marc

      Also:

      Pocket-Edition ist tot. Es gibt nur noch Bedrock. Bedrock gibt es noch nicht nativ für ARM-Architektur wie den Pi. Das geht nur auf einem x86 Gerät. Anleitung gibt es hier.

      Zu Permission Denied bei Watchtower:

      Anleitung komplett befolgt? Alle Befehle aus 4 übernommen? Sonst starte von vorn und nutze lieber den Schnellstart

  2. Avatar von Marek R.
    Marek R.

    Hi Marc,

    ich versuche dein Docker Image auf einem gemieteten Ubuntu-Vserver zu starten. Mit alten Versionen ging das, die aktuelle bricht aber mit folgendem Fehler ab:

    [0.012s][warning][os,thread] Failed to start thread „GC Thread#0“ – pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
    #
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Cannot create worker GC thread. Out of system resources.

    Hast Du eine Idee, was ich tun könnte?

    Danke und liebe Grüße
    Marek

    1. Avatar von Marc
      Marc

      Zu wenig RAM?

    2. Avatar von Marek R.
      Marek R.

      Danke für die Antwort!

      RAM war auch mein erster Gedanke. Der Fehler kommt unabhängig davon, was ich als MEMORYSIZE-parameter angebe. Und der VServer hat 8GB RAM – was ja mehr ist als die meisten Raspis so mitbringen…

      ‚free‘ gibt folgendes aus (was mich glauben lässt, dass da genügend Speicher sein müsste).

      gesamt belegt frei gemeinsam Zwischen verfügbar
      Speicher: 8388608 118428 8016668 148 253512 8270032
      Auslager: 0 0 0

    3. Avatar von Marc
      Marc

      Da es ja sonst funktioniert, würde ich eher vermuten, dass Docker hier nicht genug RAM bekommt oder so was. Also das Image startet ja lokal bei mir auch mit den Standard-Parametern. Probier doch mal das lokal zu starten und zu schauen, was der Unterschied ist. Denn das Image selbst ist bewusst ultra-minimalistisch damit so was nicht passiert

  3. Avatar von Marek R.
    Marek R.

    Hi Marc,

    danke für die Antwort!

    Ich hab gerade auf Stackoverflow einen Post gefunden der darauf hinwies, dass das Problem unter Umständen mit einer veralteten Docker-Version zusammenhängen könnte ( ) und hab daraufhin Docker nochmal neu installiert.

    Jetzt läuft das Image!

  4. Avatar von Daniel
    Daniel

    Vorher aus Versehen als Antwort geschrieben :D

    Hallo Marc,
    vielen Dank für die super Anleitung!
    Ich habe soweit alles eingerichtet und kann auch problemlos connecten.
    Ich möchte jedoch mit Freunden spielen.
    Wie genau funktioniert das?
    Ich habe eine FritzBox und muss den Port freigeben, oder?

    Vielen Dank im Voraus!
    Daniel

    1. Avatar von Marc
      Marc

      Ist nun im Artikel zu finden.

  5. Avatar von Thomas und Felix
    Thomas und Felix

    Hallo Marc,
    folgende Fehlermeldung kam bei uns, bei der Eingabe folgender Zeilen aus der Anleitung. Vielleicht hast Du einen Tipp / Hilfe für uns. Vater und Sohn bei der Weihnachtsgeschenk Einlösung – Pi Minecraft Server :-D

    Viele Grüße
    Thomas und Felix

    docker run -d \
    –restart unless-stopped \
    –name mcserver \
    -e MEMORYSIZE=’3G‘ \
    -e PAPERMC_FLAGS=“ \
    -v /home/pi/mcserver:/data:rw \
    -p 25565:25565 \
    -it marctv/minecraft-papermc-server:latest
    Unable to find image ‚marctv/minecraft-papermc-server:latest‘ locally
    latest: Pulling from marctv/minecraft-papermc-server
    10175de2f0c4: Pull complete
    f7f2e5e37e70: Pull complete
    0e62df99821b: Pull complete
    d7503a0cabf5: Pull complete
    c1ab62908f0a: Pull complete
    dd42d65c5388: Pull complete
    4e563cbfbdbc: Pull complete
    11d9a3b9e99b: Pull complete
    82eb7db9f79b: Pull complete
    4f4fb700ef54: Pull complete
    e53478c3136f: Pull complete
    5703a3ec58dd: Pull complete
    Digest: sha256:f770c32560a73d77a0c4cf48f1ef80716573b7bb7997d149aaf4c2429f78cd99
    Status: Downloaded newer image for marctv/minecraft-papermc-server:latest
    24342ac5791a9a5f4ad20019f8c6b8fd94641eacc97302f1fb49c9d18b8c9040
    docker: Error response from daemon: failed to create shim task: OCI runtime crea te failed: runc create failed: unable to start container process: unable to appl y cgroup configuration: unable to start unit „docker-24342ac5791a9a5f4ad20019f8c 6b8fd94641eacc97302f1fb49c9d18b8c9040.scope“ (properties [{Name:Description Valu e:“libcontainer container 24342ac5791a9a5f4ad20019f8c6b8fd94641eacc97302f1fb49c9 d18b8c9040″} {Name:Slice Value:“user.slice“} {Name:Delegate Value:true} {Name:PI Ds Value:@au [3470]} {Name:MemoryAccounting Value:true} {Name:CPUAccounting Valu e:true} {Name:IOAccounting Value:true} {Name:TasksAccounting Value:true} {Name:D efaultDependencies Value:false}]): Interactive authentication required.: unknown

    1. Avatar von Marc
      Marc

      Ihr nutzt nicht das Original-Skript. Probiert es bitte nochmal ganz von vorne. Ihr habt zb 3 GB Speicher gesetzt.

  6. Avatar von Thomas und Felix
    Thomas und Felix

    Hallo Marc,

    vielen Dank für Deine superschnelle Antwort.
    Wir haben nur auf 3G gesetzt um dies nicht im Anschluss ändern zu müssen…oder ist das die falsche Stelle um dies zu tun?
    Ansonsten haben wir nichts geändert am Original-Skript.
    Wir kamen aufgrund der Kommentare darauf, dass bei 4GB Arbeitsspeicher auch auf 2G oder 3G erhöht werden kann.

    Vielen Dank und viele Grüße!

    1. Avatar von Thomas und Felix
      Thomas und Felix

      Lieber Marc,
      es läuft jetzt.

      Unser Workaround:
      Trotz Original-Skript mit „-e MEMORYSIZE=’1G‘ \“ , hatten wir ein sehr lange Fehlermeldung.
      Der Befehl „docker ps“ brachte nur das Ergebnis :CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      Der Befehl „docker logs mcserver –follow“ brachte kein Ergebnis.
      Der Befehl „docker start mcserver“ -> Fehlermeldung
      Danach reboot now.
      Erneut Befehl „docker start mcserver“ -> LÄUFT!

      Die Memorysize Erhöhung haben wir dann nach Deiner Antwort im Kommentarbereich unter Deinem Video-Tutorial durchgeführt
      Ja. Wenn du einen RPi 4 2GB hast, ist das meiner Erfahrung nach genau richtig. Du kannst es natürlich anheben, wenn du einen Raspberry Pi 4 4 oder 8 GB hast.
      Um den RAM auf 3GB für einen 4GB Pi nachträglich zu setzen:

      docker stop mcserver
      docker rm mcserver
      docker run -d –restart unless-stopped –name mcserver -e MEMORYSIZE=’3G‘ -e PAPERMC_FLAGS=“ -v /home/pi/mcserver:/data:rw -p 25565:25565 -it marctv/minecraft-papermc-server:latest

      -> 1A es funktioniert bis jetzt alles.

      Woher und warum die vielen Fehlermeldung kamen, keine Ahnung. Neuer Pi4 – neue SD-Karte – bei jedem Versuch jungfräulich mit Pi OS lite 64bit bespielt – Anleitung mit Copy-Paste eingefügt.

      Letztendlich alle super!

      Vielen Dank und viele Grüße
      Thomas und Felix

    2. Avatar von Marc
      Marc

      Wirklich komisch. Aber toll, dass es nun läuft. =) Das sollte auch nun einfach funktionieren.

  7. Avatar von Markus Stellmann
    Markus Stellmann

    irgendwie passiert bei Schritt 6 nichts und auf den server komm ich auch nicht.

    1. Avatar von Marc
      Marc

      Leider gibt es ein Problem mit der neusten Docker Version. Deswegen bitte einmal neustarten und die Container dann hochfahren. Dann geht es:

      sudo reboot

      docker rm mcserver && docker rm watchtower

      docker run -d –restart unless-stopped –name mcserver -e MEMORYSIZE=’1G‘ -e PAPERMC_FLAGS=“ -v /home/pi/mcserver:/data:rw -p 25565:25565 -it marctv/minecraft-papermc-server:latest

      docker run -d –restart unless-stopped –name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

  8. Avatar von Andy
    Andy

    Toll! Hat auf Anhieb geklappt ;-)

    Frage zum „administrieren“ des Servers: Was nutzt ihr dafür?
    Also womit steuert ihr die Einstellungen des Server?

  9. Avatar von Roland
    Roland

    bekomme leider folgenden Fehler:

    docker run -d –restart unless-stopped –name mcserver -e MEMORYSIZE=’1G‘ -e PAPERMC_FLAGS=“ -v /home/pi/mcserver:/data:rw -p 25565:25565 -it marctv/minecraft-papermc-server:latest

    docker: invalid reference format.

    1. Avatar von Marc
      Marc

      Der Befehl ist auch völlig falsch formatiert.

  10. Avatar von Ben
    Ben

    bekomme leider folgenden Fehler:

    sudo docker run -d \
    –restart unless-stopped \
    –name mcserver \
    -e MEMORYSIZE=’1G‘ \
    -e PAPERMC_FLAGS=“ \
    -v /home/pi/mcserver:/data:rw \
    -p 25565:25565 \
    -it marctv/minecraft-papermc-server:latest
    Unable to find image ‚marctv/minecraft-papermc-server:latest‘ locally
    latest: Pulling from marctv/minecraft-papermc-server
    docker: no matching manifest for linux/arm/v7 in the manifest list entries.
    See ‚docker run –help‘.

    1. Avatar von Ben
      Ben

      ok, hab mit 32-bit das falsche OS installiert. Wer lesen kann… ;)