Migration und Veränderung trennen
Der erste Docker-Start sollte den alten Server möglichst genau nachbilden:
- gleiche Minecraft-Version
- gleicher Servertyp oder Modloader
- gleicher Weltname
- gleiche Plugins beziehungsweise Mods und Konfigurationen
Nur der Betriebsort ändert sich. Aktualisiert wird später, nachdem Docker einen echten Backup- und Spieltest bestanden hat.
Voraussetzungen
- Konsolenzugriff zum sauberen Stoppen der Quelle
- vollständiges Quell-Backup außerhalb des Migrationsverzeichnisses
- genaue Minecraft-, Server-, Loader-, Plugin- und Mod-Versionen
- genug Platz, um die alte Installation unverändert zu behalten
- ein Docker-Hostverzeichnis im Besitz der Container-UID, normalerweise
1000:1000
Falls das Ökosystem unklar ist, bestimme es vor dem Kopieren mit dem Vergleich der Serversoftware.
Schritt 1: Quelle einfrieren und erfassen
Notiere level-name aus server.properties, Software-/Versionsausgabe, Java-Version, Plugin-/Mod-Liste und alle externen Ports. Stoppe den Quellserver sauber und kontrolliere, dass sein Prozess beendet ist.
Lege vor jeder Änderung ein Gesamtarchiv an:
tar -czf "minecraft-source-$(date +%Y%m%d-%H%M%S).tgz" /pfad/zum/alten-server
Speichere das Archiv außerhalb dieses Quellordners, damit es sich nicht selbst einschließt.
Variante A: nur eine Welt importieren
Nutze WORLD, wenn du die Welt übernehmen, aber bewusst mit frischer Serverkonfiguration beginnen willst. Lege die gestoppte Quellwelt unter ./import/world ab:
services:
mc:
image: itzg/minecraft-server:java25
restart: unless-stopped
ports:
- "127.0.0.1:25565:25565"
environment:
EULA: "TRUE"
TYPE: PAPER
VERSION: "26.1.2"
LEVEL: world
WORLD: /import/world
volumes:
- ./data:/data
- ./import:/import:ro
Das Image sucht in der Quelle nach level.dat und kopiert die Welt in den durch LEVEL benannten Ordner. Normalerweise geschieht der Import nur, solange diese Zielwelt fehlt. Füge kein FORCE_WORLD_COPY: "TRUE" hinzu; sonst würde die Quelle bei jedem Start erneut über das Ziel kopiert.
Enthält das Archiv mehrere level.dat, setze WORLD_INDEX erst, nachdem du den richtigen Treffer identifiziert hast.
Variante B: vollständige Serverdaten umziehen
Diese Variante übernimmt auch Plugins/Mods und deren Konfiguration. Beginne mit leerem ./data und kopiere die gestoppte Installation:
mkdir -p data
cp -a /pfad/zum/alten-server/. ./data/
sudo chown -R 1000:1000 ./data
Verwende danach denselben /data-Mount sowie TYPE, VERSION, Loader und Java-Version wie in der Quelle. Das Image verwaltet seine Serverdatei selbst; alte Startskripte und JARs können im archivierten Ursprung bleiben, statt Teil des neuen Betriebs zu werden.
Falls deine Compose-Datei nicht 1000:1000 nutzt, setze die dort konfigurierte UID und GID ein. Bei Schreibfehlern unter /data hilft der Permission-denied-Guide.
Grenze einer Paper-Migration
Dateien zu kopieren ersetzt keinen unterstützten Wechsel der Serversoftware. Die aktuelle Paper-Dokumentation hält fest:
- Vanilla kann über den dokumentierten Weg zu Paper migrieren
- Fabric-/Forge-Welten mit eigenen Mod-Daten können nicht einfach zu Paper werden
- ein direkter Wechsel von Spigot/CraftBukkit zu Paper ist seit 26.1 grundsätzlich nicht möglich; der dokumentierte Weg führt zuerst über Vanilla
Führe eine notwendige Konvertierung an einer Kopie durch, bevor Docker hinzukommt – oder bilde zuerst den alten Servertyp in Docker nach.
Privat starten und prüfen
Durch die Bindung an 127.0.0.1 können entfernte Spieler während des Ersttests nicht beitreten.
docker compose config
docker compose up -d
docker compose logs -f mc
docker compose exec mc rcon-cli version
docker compose exec mc rcon-cli save-all flush
Prüfe Seed und bekannte Orte, Nether und Ende, Spielerinventare und Positionen, Rechte, Plugins/Mods sowie einen Stop-/Start-Zyklus. Erstelle und teste anschließend ein Docker-Backup, bevor du die Portbindung für Spieler öffnest.
Rollback
Stoppe den Docker-Stack und starte die unangetastete Quellinstallation wieder. Lass nie beide Instanzen auf dasselbe Weltverzeichnis zugreifen und veröffentliche sie nicht gleichzeitig auf demselben Port.
Bewahre Quelle und Archiv auf, bis der Docker-Server Backups, Neustarts und repräsentativen Spielbetrieb zuverlässig überstanden hat.
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Sichere Reaktion |
|---|---|---|
| Eine neue leere Welt erscheint | LEVEL, WORLD oder Bind Mount ist falsch | Stoppen, level.dat-Pfade prüfen und mit leerem Ziel wiederholen |
| Nether oder Ende wirkt zurückgesetzt | Nicht unterstützte Konvertierung oder falsches Weltlayout | Sofort stoppen und Migrationsdoku der Quellsoftware befolgen |
/data ist nicht beschreibbar | Host-Besitz passt nicht zu UID/GID | Besitz korrigieren; kein chmod -R 777 verwenden |
| Plugins oder Mods scheitern | Typ, Loader, Version, Java oder Abhängigkeiten weichen ab | Quell-Stack nachbilden, bevor du irgendetwas aktualisierst |
| Spieler können während des Tests beitreten | Port ist auf allen Interfaces offen | Bis zum Abschluss nur an 127.0.0.1 binden |
Nächste Schritte
- Docker-Kopie mit automatischen Backups schützen.
- Nach stabiler Migration das sichere Update- und Rollback-Runbook verwenden.
- Für Modrinth-Packs dem eigenen Modpack-Guide folgen.