Appearance
How to run a TeamSpeak 6 server with Docker Compose
TeamSpeak 6 is the new generation of the TeamSpeak voice chat server. The server is still in beta, and TeamSpeak ships it as an official Docker image with a free 32 slot beta license. This guide sets it up on a fresh Ubuntu 24.04 VPS with Docker Compose, opens the right ports, shows how to become the server admin and how to update without losing channels and permissions.
What you need
- A VPS with Ubuntu 24.04. The TeamSpeak server itself is light, so the smallest plans work. We recommend VPS-2 (1 vCPU, 2 GB RAM, 32 TB traffic): the RAM leaves room for Docker and the system, and the large traffic allowance matters more than CPU for a voice server that runs all day. More options are on the TeamSpeak server hosting page.
- SSH access to the server. If you have not connected yet, see how to connect via SSH.
- The TeamSpeak 6 client on your computer to connect and claim admin rights.
Beta software
TeamSpeak 6 Server is a beta release. The included license gives 32 slots and TeamSpeak renews it during the beta period. TeamSpeak 3 licenses do not work with TeamSpeak 6, and there is no migration path from a TeamSpeak 3 server yet.
Step 1. Connect and update the server
Log in as root with the IP and password from the Cloud Servers page of the panel:
bash
ssh root@YOUR_SERVER_IPInstall the latest updates:
bash
apt update && apt upgrade -yStep 2. Install Docker
Docker publishes an official convenience script that adds its repository and installs Docker Engine together with the Compose plugin:
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.shCheck that both commands work:
bash
docker --version
docker compose versionStep 3. Open the ports with UFW
TeamSpeak 6 uses two ports for normal operation:
| Port | Protocol | Purpose |
|---|---|---|
| 9987 | UDP | Voice |
| 30033 | TCP | File transfer (avatars, icons, channel files) |
The server can also run a query interface (HTTP on 10080, SSH on 10022), but it is off unless you enable it, and you do not need it to use the server.
Allow SSH first so you do not lock yourself out, then the TeamSpeak ports, and enable the firewall:
bash
ufw allow OpenSSH
ufw allow 9987/udp
ufw allow 30033/tcp
ufw enable
ufw statusDocker and UFW
Ports published by Docker containers bypass UFW rules. That is fine here because we want 9987 and 30033 open anyway, but it means the real list of open ports is what you put under ports: in the Compose file. Do not publish ports you do not need.
Step 4. Create the Compose file
Make a folder for the server and open a new Compose file:
bash
mkdir -p /opt/teamspeak
cd /opt/teamspeak
nano compose.yamlPaste this configuration, based on the official example from TeamSpeak:
yaml
services:
teamspeak:
image: teamspeaksystems/teamspeak6-server:latest
container_name: teamspeak-server
restart: unless-stopped
ports:
- "9987:9987/udp"
- "30033:30033/tcp"
environment:
- TSSERVER_LICENSE_ACCEPTED=accept
volumes:
- teamspeak-data:/var/tsserver
volumes:
teamspeak-data:
name: teamspeak-dataWhat the important lines do:
TSSERVER_LICENSE_ACCEPTED=acceptaccepts the TeamSpeak license. Without it the server does not start.teamspeak-data:/var/tsserverkeeps the database, channels, permissions and uploaded files in a named Docker volume. The container can be deleted and recreated, the data stays.restart: unless-stoppedstarts the server again after a crash or a VPS reboot.
Save the file with Ctrl+O, Enter and exit with Ctrl+X.
Step 5. Start the server and get the privilege key
Start the container in the background:
bash
docker compose up -dOn the very first start the server creates a ServerAdmin privilege key (a one time token) and prints it to the log. Open the log:
bash
docker compose logs -fFind the line with the privilege key and copy the key somewhere safe. Press Ctrl+C to leave the log view, the server keeps running.
The key is printed only once
The privilege key appears only on the first start with an empty data volume. If you miss it and have no data worth keeping yet, the quickest way to get a new one is to remove the container and the volume with docker compose down -v and start again.
Step 6. Connect and become the admin
- Open the TeamSpeak 6 client and connect to
YOUR_SERVER_IP. The default port 9987 does not need to be typed. - Use the privilege key you copied in the previous step. The client offers to enter it when you connect to a new server, or you can enter it later through the privilege key option in the client.
- After the key is accepted your identity gets the Server Admin group. You can now create channels, set a server password and manage permissions.
Once one admin exists, the key is used up. Give other people admin rights from the client instead of sharing tokens.
Update the server
New beta builds come out regularly and the beta license renews through them, so keep the server up to date. The data lives in the volume, so updating only replaces the container:
bash
cd /opt/teamspeak
docker compose pull
docker compose up -dRemove old images afterwards to free disk space:
bash
docker image prune -fBack up the data
Everything important is in the teamspeak-data volume. To make a copy, stop the server briefly and archive the volume:
bash
cd /opt/teamspeak
docker compose stop
docker run --rm -v teamspeak-data:/data -v /root:/backup alpine tar czf /backup/teamspeak-backup.tar.gz -C /data .
docker compose startDownload /root/teamspeak-backup.tar.gz to your computer with scp. Keep a copy off the server, because deleting a VPS removes its disk for good.
Common problems
| Problem | What to check |
|---|---|
| Client cannot connect | Run docker compose ps to see if the container is up, and check ufw status for 9987/udp. |
| Voice works, avatars and files do not | Port 30033/tcp is closed or not published. |
| Container restarts in a loop | Look at docker compose logs. A missing TSSERVER_LICENSE_ACCEPTED=accept is the usual cause. |
| Server stopped answering | The VPS may be suspended because the balance ran out. See hourly billing. |
Summary
A TeamSpeak 6 server takes about ten minutes to set up: install Docker, open 9987/udp and 30033/tcp, start the official image with the license accepted and a data volume, then claim admin with the privilege key from the log. Updates are a pull and a restart. See plans and pricing on the TeamSpeak server hosting page.