A complete Docker setup for running Minecraft servers with optional Velocity proxy support. Features enhanced logging, health checks, and easy configuration management.
# Start just the Minecraft server
docker compose -f docker-compose-standalone-server-setup.yml up -d
# View logs
docker compose -f docker-compose-standalone-server-setup.yml logs -f server# Start both proxy and server
docker compose -f docker-compose-proxy-setup.yml up -d
# View logs
docker compose -f docker-compose-proxy-setup.yml logs -fdocker-minecraft/
โโโ server/ # Paper Minecraft Server
โ โโโ Dockerfile # Server container build
โ โโโ entrypoint.sh # Enhanced logging entrypoint
โ โโโ scripts/ # Server management scripts
โ โโโ log4j2.xml # Log rotation configuration
โโโ proxy/ # Velocity Proxy
โ โโโ Dockerfile # Proxy container build
โ โโโ entrypoint.sh # Enhanced logging entrypoint
โ โโโ scripts/ # Proxy management scripts
โ โโโ log4j2.xml # Log rotation configuration
โโโ docker-compose-proxy-setup.yml # Full setup (proxy + server)
โโโ docker-compose-standalone-server-setup.yml # Server only
โโโ README.md # This file
- Docker and Docker Compose installed
- At least 4GB RAM available for containers
- Port 25565 available on your host
git clone <your-repo>
cd docker-minecraft
# Build both images
docker compose -f docker-compose-proxy-setup.yml buildPerfect for single-server setups or testing.
# Start the server
docker compose -f docker-compose-standalone-server-setup.yml up -d
# Check status
docker compose -f docker-compose-standalone-server-setup.yml ps
# View logs
docker compose -f docker-compose-standalone-server-setup.yml logs -f serverAccess: Connect to localhost:25565
Perfect for multi-server networks or production setups.
# Start both services
docker compose -f docker-compose-proxy-setup.yml up -d
# Check status
docker compose -f docker-compose-proxy-setup.yml ps
# View logs
docker compose -f docker-compose-proxy-setup.yml logs -fAccess: Connect to localhost:25565 (proxy handles routing to backend servers)
environment:
EULA: "true" # Required: Accept Minecraft EULA
VERSION: "" # Optional: Specific MC version (e.g., '1.21')
BUILD: "" # Optional: Specific Paper build (e.g., '130')environment:
VERSION: "" # Optional: Specific Velocity version (e.g., '3.4.0')
BUILD: "" # Optional: Specific build number (e.g., '522')volumes:
- minecraft-server:/minecraft # Server data (worlds, configs)
- ./minecraft-config:/config # Persistent configs
- ./minecraft-plugins:/minecraft/plugins # Server plugins
# Optional: Custom worlds
# - ./minecraft-world:/minecraft/world
# - ./minecraft-world-nether:/minecraft/world_nether
# - ./minecraft-world-the-end:/minecraft/world_the_endvolumes:
- velocity-proxy:/velocity # Proxy data
- ./velocity-config:/config # Persistent configs
- ./velocity-plugins:/velocity/plugins # Proxy pluginsserver.properties- Basic server settingsspigot.yml- Spigot-specific settingspaper-global.yml- Paper server settingsbukkit.yml- Bukkit settings
velocity.toml- Main proxy configurationforwarding.secret- Security key for backend servers
# Start services
docker compose -f docker-compose-proxy-setup.yml up -d
# Stop services
docker compose -f docker-compose-proxy-setup.yml down
# Restart services
docker compose -f docker-compose-proxy-setup.yml restart
# View logs
docker compose -f docker-compose-proxy-setup.yml logs -f
# View specific service logs
docker compose -f docker-compose-proxy-setup.yml logs -f server
docker compose -f docker-compose-proxy-setup.yml logs -f proxy# Access server container
docker exec -it <container-name> bash
# Available commands inside container:
start # Start the server
stop # Stop the server gracefully
restart # Restart the server
status # Check server status
debug # Attach to server console (Ctrl+B then D to detach)Both services include enhanced health checks that verify:
- Process is running (tmux session exists)
- Service is accepting connections on port 25565
- Automatic restart if health checks fail
- Automatic log rotation detection - Handles when logs rotate seamlessly
- Old log file handling - Shows recent content from rotated logs
- Docker logs integration - All logs flow to
docker logs - Multi-file monitoring - Monitors all log files including compressed ones
- Application logs: Inside containers at
/minecraft/logs/and/velocity/logs/ - Docker logs: Accessible via
docker logs <container-name>
- Application level: Rotates at 100MB, keeps 14 days (log4j2.xml)
- Docker level: Rotates at 100MB, keeps 5 files (docker-compose.yml)
- Place
.jarfiles in./minecraft-plugins/ - Restart the server:
docker compose restart server - Plugin configs will be generated automatically
- Place
.jarfiles in./velocity-plugins/ - Restart the proxy:
docker compose restart proxy - Plugin configs will be generated automatically
Note: Use Velocity plugins for the proxy, not Bukkit/Spigot plugins.
- Port: 25565 (exposed to host)
- Access:
localhost:25565
- Proxy Port: 25565 (exposed to host)
- Server Port: Internal only (not exposed)
- Access:
localhost:25565(proxy handles routing)
When using the proxy setup, configure your backend servers:
online-mode=falsesettings:
bungeecord: falseproxies:
velocity:
enabled: true
secret: "your-forwarding-secret-here"# Check logs
docker compose logs server
# Check if EULA is accepted
docker exec <container> cat /minecraft/eula.txt# Check if port is open
netstat -tlnp | grep 25565
# Check container status
docker compose ps
# Check health status
docker inspect <container> | grep -A 10 Health# Check if log aggregator is running
docker exec <container> ps aux | grep log
# Check log directory
docker exec <container> ls -la /minecraft/logs/The server is configured with 12GB RAM by default. Adjust in server/scripts/start.sh:
# Change these values in start.sh
-Xms12G -Xmx12GThe server uses Aikar's optimized JVM flags. These are already configured for optimal performance.
This project is licensed under the MIT License - see the LICENSE file for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
- PaperMC Documentation
- Velocity Documentation
- Minecraft Server Properties
- Docker Compose Documentation
Happy Mining! โ๏ธ