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.
${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/