A Pterodactyl Egg for running the TeamSpeak 6 Server (Beta) on Wings.
This egg is designed for people who want to host TS6 inside Pterodactyl while keeping data persistent and management simple.
Pterodactyl already supports voice servers well, but TeamSpeak 6 (Beta) has a few quirks compared to TS3:
- TS6 expects a writable data/log directory (commonly
/var/tsserver) - TS6 requires explicit license acceptance
- Depending on your Wings configuration, mounts can be blocked unless explicitly allowed
This egg documents a known-good setup and common pitfalls.
- ✅ Uses official TeamSpeak 6 server image (
teamspeaksystems/teamspeak6-server:latest) - ✅ License handling via
TSSERVER_LICENSE_ACCEPTED(accept/view) - ✅ Standard TeamSpeak ports configurable via panel variables
- ✅ Persistent storage via mount to
/var/tsserver - ✅ Troubleshooting section for the most common TS6 crashes (log directory / permissions / mounts)
- Requirements
- Networking / Ports
- Install (Import Egg)
- Create the Server
- Create & Attach the Mount
- Enable Mounts in Wings (IMPORTANT)
- First Start (License)
- Troubleshooting
- License
- ✅ Working and up-to-date Pterodactyl Panel + Wings
- ✅ Admin access to the Pterodactyl Panel
- ✅ SSH root access to the Wings node (recommended for troubleshooting)
- ✅ Firewall must allow:
- Pulling Docker images from registries (Docker Hub / GHCR)
- (Optional) Access to GitHub if you use scripts/repo distribution
Create allocations for the ports you want to use.
- 9987/UDP — Voice (Primary allocation)
- 30033/TCP — File transfer
- 10011/TCP — Query (raw)
- 10022/TCP — Query via SSH
- 10080/TCP — Query via HTTP
Tip: In Pterodactyl, the Primary allocation becomes
{{SERVER_PORT}}.
- Download/copy the egg JSON file.
- In the Panel go to:
- Admin Area → Nests
- Create a custom Nest (recommended).
Do not use default nests if you can avoid it — updates may overwrite them.
- Go into your Nest → Eggs → Import Egg
- Upload/select your
egg-teamspeak6-server.json - You should see: “Egg successfully imported”
- Admin Area → Servers → Create New
- Select your TS6 Nest + Egg
- Choose Docker Image:
teamspeaksystems/teamspeak6-server:latest
- Set allocations:
- Primary: 9987/UDP
- Additional: 30033/TCP (+ optional query ports)
- Create the server
TeamSpeak 6 must be able to write logs/data. The official image expects it at:
/var/tsserver
- Admin Area → Mounts → Create New
- Set:
- Source:
/var/lib/pterodactyl/volumes/<SERVER_UUID> - Target:
/var/tsserver - Read Only:
false
- Source:
- Assign the mount to:
- the correct Node
- the correct Egg
- Admin → Servers → (your server) → Mounts
- Tick/Attach your TS6 mount
- Save
✅ If correctly applied, the container will be able to create:
/var/tsserver/logs
If your Wings config has allowed_mounts: [], bind mounts may be blocked and Wings may silently fall back to Docker-managed volumes.
Edit:
nano /etc/pterodactyl/config.ymlSet:
allowed_mounts:
- /var/lib/pterodactyl/volumesYAML indentation matters:
allowed_mounts:must start at the left margin, and the list item must be indented with two spaces.
Restart Wings:
systemctl restart wings
systemctl status wings --no-pager -lBefore TS6 will start, you must accept the license.
In the server Variables, set:
TSSERVER_LICENSE_ACCEPTED = accept
Other supported value:
view(prints the license text)
Start the server. On first successful startup you should see output including admin/privilege information in the logs.
This means TS6 cannot write to /var/tsserver.
Checklist
- Is the mount attached to the server?
- Is
/var/tsserverreally bind-mounted, or is it a Docker volume fallback?
Check which mount is actually used On the node:
CID=$(docker ps -a --format "{{.ID}} {{.Image}} {{.CreatedAt}}" | awk '$2=="teamspeaksystems/teamspeak6-server:latest"{print $1; exit}')
docker inspect "$CID" --format '{{range .Mounts}}{{println .Source "->" .Destination "rw=" .RW}}{{end}}'You want to see:
/var/lib/pterodactyl/volumes/<SERVER_UUID> -> /var/tsserver rw= true
If you instead see:
/var/lib/docker/volumes/<random>/_data -> /var/tsserver
then Wings blocked your bind mount (usually allowed_mounts), and you must fix the Wings config.
Example:
yaml: block sequence entries are not allowed in this context
Your indentation is broken.
Print a section around the error line:
nl -ba /etc/pterodactyl/config.yml | sed -n '95,120p'Fix indentation and restart Wings.
Most commonly:
- cannot write to
/var/tsserver/logs - license not accepted (
TSSERVER_LICENSE_ACCEPTEDnot set toaccept)
pterodactyl-teamspeak6-beta-egg is GNU General Public License v3.0. Please check the License before performing any changes on the scripts.