Add screen support for interactive console

This commit is contained in:
SimolZimol
2025-12-09 13:50:52 +01:00
parent 0099ab571f
commit 667f644a67
5 changed files with 57 additions and 25 deletions

17
Dockerfile.minecraft Normal file
View File

@@ -0,0 +1,17 @@
FROM itzg/minecraft-server:latest
# Screen installieren
USER root
RUN apt-get update && \
apt-get install -y screen && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Start-Script mit Screen
COPY start-screen.sh /start-screen.sh
RUN chmod +x /start-screen.sh
USER minecraft
# Screen-Session beim Start
CMD ["/start-screen.sh"]

View File

@@ -2,9 +2,13 @@ version: '3.8'
services:
minecraft:
image: itzg/minecraft-server:latest
build:
context: .
dockerfile: Dockerfile.minecraft
container_name: ${CONTAINER_NAME:-minecraft-server}
restart: unless-stopped
stdin_open: true
tty: true
environment:
# ===== BASIS KONFIGURATION =====

View File

@@ -1,31 +1,21 @@
#!/bin/bash
# Minecraft Console - Live Logs mit Command-Eingabe
# Minecraft Console - Screen Attach
CONTAINER="${MC_CONTAINER:-minecraft-server}"
echo "=== Minecraft Console ==="
echo "=== Minecraft Screen Console ==="
echo "Container: $CONTAINER"
echo "Drücke STRG+C zum Beenden"
echo "Commands: 'say <text>', 'list', 'stop', etc."
echo "=========================="
echo "Verbinde mit Screen-Session..."
echo "Zum Detachen: STRG+A dann D"
echo "================================"
echo ""
# Starte Live-Logs im Hintergrund
docker logs -f "$CONTAINER" 2>&1 &
LOGS_PID=$!
# Prüfe ob Container läuft
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
echo "ERROR: Container '$CONTAINER' läuft nicht!"
exit 1
fi
# Trap für sauberes Beenden
trap "kill $LOGS_PID 2>/dev/null; exit" INT TERM
# Verbinde mit Screen-Session
docker exec -it "$CONTAINER" screen -r minecraft
# Command-Loop
while true; do
read -p "> " cmd
if [ -n "$cmd" ]; then
if [ "$cmd" = "exit" ] || [ "$cmd" = "quit" ]; then
echo "Beende Console..."
kill $LOGS_PID 2>/dev/null
exit 0
fi
docker exec "$CONTAINER" rcon-cli "$cmd"
fi
done

View File

@@ -4,8 +4,10 @@
CONTAINER="${MC_CONTAINER:-minecraft-server}"
echo "Stopping Minecraft Server: $CONTAINER"
echo "Sending 'stop' command..."
docker exec "$CONTAINER" rcon-cli stop
echo "Sending 'stop' command to screen session..."
# Sende 'stop' in Screen-Session
docker exec "$CONTAINER" screen -S minecraft -X stuff "stop\n"
echo "Waiting for graceful shutdown (max 60s)..."
docker stop -t 60 "$CONTAINER"

19
start-screen.sh Normal file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
set -e
# Starte Server in Screen-Session
echo "Starting Minecraft Server in screen session 'minecraft'..."
# Screen-Session erstellen und Server starten
screen -dmS minecraft /start
# Warte kurz und zeige Status
sleep 2
echo "Screen session started. Use 'screen -r minecraft' to attach."
# Halte Container am Leben durch Screen-Monitoring
while screen -list | grep -q "minecraft"; do
sleep 10
done
echo "Screen session ended, container stopping..."