Docker Compose & Pterodactyl egg generator
Build a production-ready docker-compose.yml for Minecraft, a Node app, a Postgres-backed stack, or a static Nginx site — or generate the JSON for a Pterodactyl egg to import into your own panel.
No additional variables.
# docker-compose.yml generado en solumecore.com/tools/docker-pterodactyl
# Compose Specification: no hace falta la clave "version:" en Docker Compose v2+
services:
minecraft:
image: itzg/minecraft-server:latest
container_name: minecraft
restart: unless-stopped
ports:
- "25565:25565"
volumes:
- mc-data:/data
environment:
- EULA=TRUE
- TYPE=PAPER
- VERSION=LATEST
- MEMORY=4G
- DIFFICULTY=normal
- MOTD=A Minecraft Server powered by SolumeCore
- MAX_PLAYERS=20
- ONLINE_MODE=TRUE
tty: true
stdin_open: true
volumes:
mc-data:
What is Docker Compose and why use it for a game or app server?
Docker Compose describes, in a single YAML file, every container (service), port, volume and environment variable your application needs. Instead of remembering a long list of "docker run" flags, you run a single docker compose up -d and everything comes up with exactly the same configuration every time. That makes your server reproducible (you can recreate it identically on another machine), trivial to version in Git, and easy to tear down and rebuild without fear — especially valuable for game servers, where you're often testing mods, versions or configs.
Why does the generated YAML not have a "version:" key?
For years, docker-compose.yml started with a version: "3.8" line indicating which schema subset the file used. Since Docker Compose V2 (the one built into docker compose, no hyphen, in Docker Desktop and modern Docker Engine) adopted the "Compose Specification", that key became obsolete: the engine simply ignores the version and always applies the newest schema it supports. Docker even prints a warning if you leave it in. That's why this generator builds a file without version: — that's the current recommended practice.
itzg/minecraft-server: the de facto standard
For Minecraft we use the itzg/minecraft-server image, community-maintained for over a decade and pulled hundreds of millions of times on Docker Hub. Instead of installing Java yourself, downloading the right JAR and writing your own startup script, this image handles all of that from simple environment variables: EULA=TRUE (required — without it the container starts and immediately shuts itself down), TYPE to pick the server software (Paper, Vanilla, Forge, Fabric and more), VERSION, MEMORY for the JVM heap, and many others. It's by far the most common way to run Minecraft in Docker today.
What is a Pterodactyl egg?
Pterodactyl is an open-source game server management panel, very popular with hosts and communities running their own infrastructure. An "egg" is the reusable template that tells the panel how to install and start a given server type: which Docker image to use, which startup command to run, which variables to expose to the end user (like version or memory), and which script to run during installation. The official eggs cover the most popular games, but if you run your own Pterodactyl panel and need a server type that isn't on that list, you can import a custom egg as JSON — exactly what the second tab of this tool builds.
FAQ
Do I need to know Docker to use this?+
Not to generate it — you pick options in the form and copy the resulting file. You will need Docker and the Compose plugin installed on your server (or VPS) to actually run docker compose up -d with the file this generates.
Does this egg work on any Pterodactyl panel?+
The JSON follows the real schema Pterodactyl uses to export/import eggs (meta, docker_images, config, scripts.installation, variables), so it should import without errors on any modern Pterodactyl panel via Admin → Nests → Import Egg. Still, always review and adjust the installation script (scripts.installation.script) before using it in production — the one we generate is a starting point, not a game-specific installer.
What if my game or app isn't in the preset list?+
Use the "Generic" preset — it gives you a service with a fully editable image, ports, volumes and environment variables, with nothing game-specific baked in. It's the starting point for any Docker image that already exists.
Do named volumes lose my data if I remove the container?+
No. A named volume lives outside the container's lifecycle — you can remove and recreate the container (docker compose down followed by up) as many times as you want and the data stays intact. It's only lost if you explicitly delete the volume (docker volume rm) or run docker compose down -v. A bind mount, on the other hand, points directly at a folder on your host server, so the data lives there regardless of what happens to the container.
Need a VPS to run Docker on?
VPS with real NVMe and a dedicated IP — great for running your Docker Compose stacks or your own Pterodactyl panel.
View plans