Add screen support for interactive console
This commit is contained in:
17
Dockerfile.minecraft
Normal file
17
Dockerfile.minecraft
Normal 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"]
|
||||
@@ -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 =====
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
19
start-screen.sh
Normal 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..."
|
||||
Reference in New Issue
Block a user