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 Thomas
    Thomas

    Hallo, wir wollen uns da gleich dran setzen. Frage: Warum „light“? Nimmt die grafische Oberfläche zu viel Speicherplatz weg oder geht es um Performance? Zweite Frage: reichen 16 GB SD-Karte?

    1. Avatar von Thomas
      Thomas

      Läuft. 128-GB-Karte. Vielen Dank. Kaffee kommt gleich.
      Installation mit grafischer Oberfläche und anderen Serverbezeichnungen schlug fehl (wollten einen anderen Namen als mcserver nehmen). Egal.

      Eine Frage kam aber noch auf: Wie können wir die Minecraft-Version 1.19.2 einstellen?

    2. Avatar von Marc
      Marc

      Danke. Der Server sollte sich selber aktualisieren.

  2. Avatar von Thomas
    Thomas

    Nach oben hin ist es ja schön, aber wie wollen auf eine ältere Version – gibt es eine solche Option irgendwo?

    1. Avatar von Marc
      Marc

      Hi,
      ja das geht aber dann müsst ihr WatchTower deaktivieren und manuell ein älteres Image pullen. Die Frage ist eher: Warum wollt ihr das? ALle meine Lösungen sind darauf ausgelegt, immer die neuste Version zu machen.

  3. Avatar von Thomas
    Thomas

    Ich meine meinen Sohn so verstanden zu haben, dass er die älteren Versionen für bestimmte Plugins oder Erweiterungen benötigt, die nicht notwendigerweise mit der neuesten Version funktionieren. Den Watchtower haben wir im Moment noch nicht an. Ich werde das noch mal erfragen.

    1. Avatar von Thomas
      Thomas

      Jetzt habe ich es verstanden: Es geht darum, dass in älteren Versionen immer mal „bugs“ vorhanden sind, die dann ModPacks ausnutzen und nette Funktionen bieten, an den man Spaß haben kann. Wenn ein Bug dann in einer neueren Version behoben ist, geht das nicht mehr. Daher wird immer mal wieder in älteren Versionen gespielt. Das ist bei den Hostern, die ich bisher kenne so, dass man im Webinterface die Version auswählen kann und den Server neu startet. Das muss ich jetzt für meinen Raspi noch rausfinden, wie ich verschiedene Versionen da liegen haben kann, und dann die jeweils gewünschte starte.

    2. Avatar von Marc
      Marc

      Ja. Genau. Bei diesem Setup ging es mir darum, dass man schnell und unkompliziert erstmal einen Server hat. Der Code ist so überschaubar, dass es eine gute Basis für weitere Projekte darstellt. =)

  4. Avatar von Thomas
    Thomas

    Frage an alle, die hier sowas schon mal installiert haben, und dazu noch Geyser, um von Bedrock auch spielen zu können: Habt ihr das hinbekommen? Geyer läuft eigentlich ohne Fehler, aber die Bedrock-Benutzer kommen nicht auf die Welt (auch mit Floodgate). Ist mir schon klar, dass ich hier an der falschen Stelle frage, aber da bei Geyer scheinbar niemand auf Raspberry arbeitet, dachte ich, ich frage mal hier, ob jemand Geyser zum Laufen bekommen hat.

    1. Avatar von Thomas
      Thomas

      *emoji Hand auf Stirn* Port 19132 UDP muss auch im Docker freigegeben sein. Habe ich portainer machen können. Vielleicht hilft es ja jemandem, der das gleiche Problem hat.

  5. Avatar von Thomas
    Thomas

    Die Fragen gehen weiter… :)

    Ich lese auf hub.docker.com, dass man mit
    -e PUID=xxx -e PGID=xxx
    zB auch die IDs des normalen users angeben könnte.
    Das würde für mich vermutlich das Problem lösen, dass ich nach einem upload in ein MOD- oder World-Verzeichnis immer den user auf 9001 anpassen muss, oder?

    Das bedeutet aber vermutlich auch, dass ich das jetzt nicht im laufenden Betrieb machen kann, sondern nochmal den ganzen docker und den container neu einrichten müsste?

    Das heißt, ich würde es in diesem Kommando mit einbeziehen:

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

    1. Avatar von Marc
      Marc

      Einfach ausprobieren. Der Container sollte die Rechte beim Starten dann entsprechend setzten. Und Backups sind ja easy bei Container. Also viel Spaß und berichte!

  6. Avatar von Thomas
    Thomas

    Worksn’t.
    „docker: invalid reference format.“

    Da ich hiermit gerade zum ersten Mal Kontakt zu docker habe, bin ich von backups bei Containern und auch beim bestimmte Versionen ziehen noch weit weg von „in der Nähe“.

    Ich bin sehr dankbar, dass du dieses Paket gebaut hast, weil wir soooo easy ready to go waren.

    Ich glaube, ich muss jetzt erst mal verstehen, wie ich den docker ggf von uid 9001 auf 1000 bekomme und wie ich innerhalb der dockers die minecraft-Version 1.19.2 ziehen könnte, bzw. relativ einfach zwischen Versionen switchen kann. Das ist alles Neuland.

    Das ist jetzt aber weder eine Forderung noch eine Frage an dich und dieses Projekt, da du ja hier eine andere Fragestellung bedienst. Ich merke nur gerade, dass ich hier erst noch einen Weg vor mir habe.

    1. Avatar von Marc
      Marc

      ChatGPT hilft hier auch besser, als ich es je könnte. Aber ich denke auch, dass der einfache Container eine gute Basis für dein Abenteuer.

  7. Avatar von Frank H
    Frank H

    Hallo, ich bin mal so frei und melde mich nach meinen Gescheiterten Versuchen.

    Der Docker für minecraft wird bei mir nicht erstellt, hatte schon sämtliche docker installationen gelöscht und wieder von neuem installiert, jedoch ohne Erfolg.

    Vielleicht hast du noch eine Lösung

    Gruß Frank

    1. Avatar von Marc
      Marc

      Ggf keinen Pi4 mit 4 GB Ram?

  8. Avatar von Frank Herges
    Frank Herges

    Hallo Marc, vielen Dank für deine Rückmeldung, Doch der PI hat 4GB RAM.
    Dies ist der Fehler welcher ausgeschrieben wird. Docker Gruppe habe ich erstellt, meinen Benutzer auch der Gruppe zusätzlich hinzugefügt, alles ohne Erfolg.

    [ERROR] Refusing to install rootless Docker as the root user
    ### Add user to docker group.
    Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install enable docker

    Bei den Containern wird auch nur der Watchtower angezeigt. Vielleicht hast du noch eine Idee.

    Gruß Frank

    1. Avatar von Frank Herges
      Frank Herges

      [ERROR] Aborting because rootful Docker (/var/run/docker.sock) is running and accessible. Set –force to ignore.
      Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
      Executing: /lib/systemd/systemd-sysv-install enable docker

    2. Avatar von Marc
      Marc

      I need to look into this when I have the time.

  9. Avatar von SuperUser
    SuperUser

    Wie kann man die gespielte Welt im Server zurück setzen um wieder neu zu spielen?

    1. Avatar von Marc
      Marc

      Einfach löschen und die Seed so lassen

  10. Avatar von Frank
    Frank

    Hallo Marc, ich bin echt schier am Verzweifeln, habs jetzt versucht händisch zu installieren, aber selbst nach der Installation von Docker, komm ich da über die IP Adresse nicht drauf. Also steckt wohl irgendwo in meinem System der Hase begraben

    1. Avatar von Marc
      Marc

      Was sagt denn „sudo docker ps“ oder „docker ps“?