Run a private Turtle WoW server with Docker. This stack uses Shyalya/tortoise-wow with playerbots.
The server work and install steps come from this video:
Tortoise WoW / playerbots setup (YouTube)
This repository ships a Compose file. CI builds and publishes the server images to GHCR. You do not build the server on your machine.
- Docker Desktop (or Docker Engine with Compose v2)
- A Turtle WoW 1.18.1 client (build 7272)
- Client data folders:
dbc,maps,vmaps,mmaps - Several GB of free disk space
The images do not include client data. You extract that data from your game client. The video and the Linux install guide show how.
git clone https://github.com/Nescabir/tortoise-docker.git
cd tortoise-dockercp .env.example .envEdit .env:
- Set strong values for
DB_ROOT_PASSWORDandDB_PASSWORD. - Set
REALM_ADDRESSto an address your game client can reach. - Set
DATA_PATHif your client data is not in./data.
Use 127.0.0.1 for REALM_ADDRESS only when the client runs on the same machine. For another PC on your LAN, use your host LAN IP.
Put the extracted folders here (or under your DATA_PATH):
data/
dbc/
maps/
vmaps/
mmaps/
Compose pulls the published images and starts the stack:
docker compose up -dThe first start downloads the images (if needed) and imports the world database. This takes several minutes.
Then watch the world server:
docker compose logs -f mangosdWait until the log shows:
World server is up and running
The first start with playerbots is slow. The server builds bot gear data before it is ready. Do not create an account before that line appears.
docker compose exec -u turtle mangosd bash -c 'echo "account create myuser mypass" > /opt/turtle/run/mangosd.in'Check that the account exists:
docker compose exec -T db mariadb -uroot -pYOUR_ROOT_PASSWORD -e "SELECT id, username FROM tw_logon.account;"Replace YOUR_ROOT_PASSWORD with the value of DB_ROOT_PASSWORD from .env.
Edit realmlist.wtf in your Turtle WoW client:
set realmlist 127.0.0.1
Use the same host as REALM_ADDRESS in .env. Then log in with the account you created.
| Setting | Default | Meaning |
|---|---|---|
REALM_ADDRESS |
127.0.0.1 |
Host the client uses to reach the world server |
REALM_NAME |
TurtleWoW |
Name of the realm in the client list |
DATA_PATH |
./data |
Folder with dbc, maps, vmaps, mmaps |
TAG |
playerbots |
Image variant (playerbots or no-bots) |
AI_PLAYERBOT_ENABLED |
1 |
Turn bots on or off (playerbots image only) |
AI_MIN_RANDOM_BOTS / AI_MAX_RANDOM_BOTS |
10 / 10 |
How many random bots to keep online |
Keep bot counts low for the first start. Raise them later in .env, then run:
docker compose up -d mangosdView logs:
docker compose logs -f realmd
docker compose logs -f mangosdStop the stack:
docker compose downStart again (keeps your database):
docker compose up -dReset the database (deletes characters and accounts):
docker compose down
docker volume ls
docker volume rm tortoise-docker_db-data tortoise-docker_init-marker
docker compose up -dVolume names can include your Compose project name. Use docker volume ls to confirm the names.
| Problem | What to do |
|---|---|
| Login fails / unknown account | Wait for World server is up and running, then create the account again |
| Account create does nothing | mangosd is still starting; wait and retry |
| Realm list is empty or offline | Check that realmd and mangosd are up: docker compose ps |
| Client hangs after you pick the realm | Set REALM_ADDRESS to an IP the client can reach; world port is 8090 |
| Empty world / no NPCs | First database import failed; check docker compose logs db-init |
| No bots | Use TAG=playerbots and AI_PLAYERBOT_ENABLED=1 |
| Client crash: interface corrupt | Use the published image from this project; do not strip Turtle addons |
- Setup walkthrough: YouTube video
- Server source: Shyalya/tortoise-wow
- Install notes: INSTALL-LINUX.md
Server code stays under the upstream project license. This repository only provides the Docker packaging.