Skip to content

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_IP

Install the latest updates:

bash
apt update && apt upgrade -y

Step 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.sh

Check that both commands work:

bash
docker --version
docker compose version

Step 3. Open the ports with UFW

TeamSpeak 6 uses two ports for normal operation:

PortProtocolPurpose
9987UDPVoice
30033TCPFile 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 status

Docker 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.yaml

Paste 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-data

What the important lines do:

  • TSSERVER_LICENSE_ACCEPTED=accept accepts the TeamSpeak license. Without it the server does not start.
  • teamspeak-data:/var/tsserver keeps the database, channels, permissions and uploaded files in a named Docker volume. The container can be deleted and recreated, the data stays.
  • restart: unless-stopped starts 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 -d

On 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 -f

Find 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

  1. Open the TeamSpeak 6 client and connect to YOUR_SERVER_IP. The default port 9987 does not need to be typed.
  2. 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.
  3. 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 -d

Remove old images afterwards to free disk space:

bash
docker image prune -f

Back 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 start

Download /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

ProblemWhat to check
Client cannot connectRun docker compose ps to see if the container is up, and check ufw status for 9987/udp.
Voice works, avatars and files do notPort 30033/tcp is closed or not published.
Container restarts in a loopLook at docker compose logs. A missing TSSERVER_LICENSE_ACCEPTED=accept is the usual cause.
Server stopped answeringThe 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.