Skip to content

Instantly share code, notes, and snippets.

@rizowski
Last active April 11, 2026 21:30
Show Gist options
  • Select an option

  • Save rizowski/0250d6b26f01919e3fbdbbdd2f94ef4e to your computer and use it in GitHub Desktop.

Select an option

Save rizowski/0250d6b26f01919e3fbdbbdd2f94ef4e to your computer and use it in GitHub Desktop.
Runescape Dragonwilds docker compose file for dedicate servers
# Absolute host path containing server/, DedicatedServer.ini, and your save file.
# DATA_DIR=/mnt/user/games/rs-dragonwilds
DATA_DIR=
# (optional) This is if you have a preexisting server sav file you want to mount
# Server save file name. This will map to the ServerName setting in the DedicatedServer.ini
# SAVE_FILE=my-world.sav
SAVE_FILE=
# Host user/group ownership for files the container writes.
# PUID=99
# PGID=100
PUID=
PGID=
# Host UDP port the server listens on.
# GAME_PORT=7777
GAME_PORT=

Runescape Dragonwilds docker compose file for dedicate servers

The basic idea is that there is a busy box that creates the folders and structure needed to start up the main container. After it changes ownership for the folders it exits allowing the server to start up. The server shouldn't have any issues starting after the correct permissions are applied.

The folder structure:

${DATA_DIR}/                          ← set this in .env (e.g. /mnt/user/games/rs-dragonwilds)
  ├── DedicatedServer.ini               ← YOU PROVIDE: server config (name, password, etc.)
  ├── ${SAVE_FILE}                      ← YOU PROVIDE: your world save, e.g. my-world.sav
  │                                        (touch an empty file on first run if you don't have one yet)
  └── server/                           ← auto-created: 4 GB Dragonwilds install from Steam
      ├── RSDragonwildsServer.sh        ← game launcher
      ├── steamapps/                    ← Steam's install metadata
      └── RSDragonwilds/
          ├── Binaries/Linux/           ← the actual server binary
          ├── Content/                  ← game assets
          └── Saved/                    ← game-managed runtime state
              ├── Config/LinuxServer/
              │   └── DedicatedServer.ini   ← copied from ../../../DedicatedServer.ini on each start
              ├── SaveGames/
              │   └── ${SAVE_FILE}          ← bind-mounted live from ../../../${SAVE_FILE}
              └── Logs/                     ← created by the server on first launch

  Example with real values (DATA_DIR=/mnt/user/games/rs-dragonwilds, SAVE_FILE=my-world.sav):

  /mnt/user/games/rs-dragonwilds/
  ├── DedicatedServer.ini
  ├── my-world.sav
  └── server/
      ├── RSDragonwildsServer.sh
      ├── steamapps/
      └── RSDragonwilds/
          ├── Binaries/Linux/
          ├── Content/
          └── Saved/
              ├── Config/LinuxServer/DedicatedServer.ini
              ├── SaveGames/my-world.sav
              └── Logs/
[SectionsToSave]
bCanSaveAllSections=true
[/Script/Dominion.DedicatedServerSettings]
OwnerId=<fromGameSettings>
WorldPassword=super-secret
AdminPassword=even-more-secret
; These are if you want to name your server.
; if importing from previous sav file set to the same name as SAVE_FILE in .env and uncomment volume mount
;ServerName=
;DefaultWorldName=
services:
dragonwilds-init:
image: busybox:latest
user: "0:0"
environment:
PUID: ${PUID:?PUID is required}
PGID: ${PGID:?PGID is required}
volumes:
- steam-home:/home/steam
- ${DATA_DIR:?DATA_DIR is required}/server:/data/server
command:
- sh
- -c
- |
set -e
for d in /data/server /data/server/RSDragonwilds /data/server/RSDragonwilds/Saved /data/server/RSDragonwilds/Saved/Config/data/server/RSDragonwilds/Saved/Config/LinuxServer /data/server/RSDragonwilds/Saved/SaveGames /home/steam; do
mkdir -p "$$d"
chown "$$PUID:$$PGID" "$$d"
done
chown -R "$$PUID:$$PGID" /home/steam
chown -R "$$PUID:$$PGID" /data/server/RSDragonwilds
dragonwilds:
image: steamcmd/steamcmd:latest
container_name: RSDragonwilds
restart: unless-stopped
user: "${PUID:?PUID is required}:${PGID:?PGID is required}"
depends_on:
dragonwilds-init:
condition: service_completed_successfully
ports:
- "${GAME_PORT:?GAME_PORT is required}:7777/udp"
environment:
HOME: /home/steam
volumes:
- steam-home:/home/steam
- ${DATA_DIR:?DATA_DIR is required}/server:/home/steam/dragonwilds
- ${DATA_DIR:?DATA_DIR is required}/DedicatedServer.ini:/home/steam/DedicatedServer.ini:ro
# This just mounts your current save file to the correct place.
# - ${DATA_DIR:?DATA_DIR is required}/${SAVE_FILE:?SAVE_FILE is required}:/home/steam/dragonwilds/RSDragonwilds/Saved/SaveGames/${SAVE_FILE:?SAVE_FILE is required}
entrypoint: /bin/bash
command:
- -c
- |
set -e
cd /home/steam/dragonwilds
steamcmd +force_install_dir /home/steam/dragonwilds +login anonymous +app_update 4019830 +quit
chmod +x ./RSDragonwildsServer.sh
cp /home/steam/DedicatedServer.ini ./RSDragonwilds/Saved/Config/LinuxServer/DedicatedServer.ini
exec ./RSDragonwildsServer.sh -log -Port=7777 2>&1
volumes:
steam-home:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment