6. Minecraft server in Portainer - JiltedGeek/Docker-Portainer GitHub Wiki
Stacks script for creating a Minecraft server as a container in Portainer
version: "3.8"
services:
init-minecraft-dirs:
image: busybox
command: >
sh -c "mkdir -p /data /data/minecraft /data/minecraft/backups /data/minecraft/world &&
chown -R 1000:1000 /data && chmod -R u+rwX /data/minecraft/backups"
restart: "no"
minecraft-server:
image: itzg/minecraft-server:latest
depends_on:
- init-minecraft-dirs
environment:
EULA: "TRUE"
VERSION: "1.21.4"
TYPE: "VANILLA"
ENABLE_ROLLING_LOGS: "true"
TZ: "Europe/Amsterdam"
SEED: "-5633977550482986697"
DIFFICULTY: "normal"
MODE: "survival"
ports:
- "25565:25565"
volumes:
- /data/minecraft:/data
- /data/minecraft/world:/data/world # world map op een aparte hostmap
restart: unless-stopped
volumes:
minecraft_data:
Backup of the minecraft server every day, 7 day retention
Create folder
sudo mkdir -p /data/minecraft/backups
Create script in home folder calles backup-minecraft.sh
sudo nano /home/pi/backup-minecraft.sh
The script
#!/bin/bash
# Instellingen
CONTAINER_NAME="minecraft-minecraft-server-1"
WORLD_DIR="/data/minecraft/world"
BACKUP_DIR="/data/minecraft/backups"
DATE=$(date +'%Y-%m-%d')
BACKUP_FILE="$BACKUP_DIR/world-$DATE.tar.gz"
# Backup directory aanmaken als die nog niet bestaat
mkdir -p "$BACKUP_DIR"
# Container pauzeren om corrupte saves te voorkomen
docker pause "$CONTAINER_NAME"
# Wacht een paar seconden zodat alles stabiel is
sleep 5
# Maak de backup
tar -czf "$BACKUP_FILE" -C "$(dirname "$WORLD_DIR")" "$(basename "$WORLD_DIR")"
# Container weer hervatten
docker unpause "$CONTAINER_NAME"
# Oude backups opruimen (alleen de 7 nieuwste houden)
ls -tp "$BACKUP_DIR"/*.tar.gz | grep -v '/$' | tail -n +8 | xargs -r rm --
echo "Backup voltooid: $BACKUP_FILE"
Make the script executable
sudo chmod +x /home/pi/backup-minecraft.sh
Schedule the script for everyday at 3:00 (AM) and 7 days a week (removes the first when the 8th is created)
sudo crontab -e
Add the following line at the bottom
0 3 * * * /home/pi/backup-minecraft.sh >> /data/minecraft/backups/backup-log.txt 2>&1
Restore script
#!/bin/bash
if [ -z "$1" ]; then
echo "Gebruik: restore-minecraft.sh <backup-bestand.tar.gz>"
exit 1
fi
BACKUP_FILE="/data/minecraft/backups/$1"
WORLD_DIR="/data/minecraft/world"
CONTAINER="minecraft-minecraft-server-1"
if [ ! -f "$BACKUP_FILE" ]; then
echo "Backup-bestand niet gevonden: $BACKUP_FILE"
exit 1
fi
echo "Stoppen van container..."
docker stop "$CONTAINER"
echo "Backuppen van huidige wereldmap..."
cp -r "$WORLD_DIR" "/data/minecraft/world.bak.$(date +%F-%H%M)"
echo "Verwijderen van huidige wereldmap..."
rm -rf "$WORLD_DIR"
echo "Uitpakken van backup..."
tar -xzf "$BACKUP_FILE" -C /data/minecraft
echo "Starten van container..."
docker start "$CONTAINER"
echo "Restore voltooid."
Make the script executable
sudo chmod +x restore-minecraft.sh
Start the script as follows
sudo ./restore-minecraft.sh world-2025-04-14.tar.gz