ASKA Dedicated Server (Proton-GE)
1.8K
Run an ASKA Dedicated Game Server in Docker on Linux. The ASKA server binary is Windows-only, hence
both images run it under wine : Proton-GE on the unstable tag, Alpine's
musl-native Wine on the experimental tag.
Images: jimbit0/aska-dedicated-server:unstable · jimbit0/aska-dedicated-server:experimental
GE-Proton11-6Runtime reported in the startup bannerxvfb-run replaced with a managed Xvfbdocker run -d \
--name aska-server \
--stop-timeout 90 \
-p 27015:27015/udp \
-p 27016:27016/udp \
-e ASKA_DISPLAY_NAME="My ASKA Server" \
-e ASKA_SERVER_NAME="my-server" \
-e ASKA_AUTH_TOKEN="YOUR_TOKEN_HERE" \
-e ASKA_SAVE_ID="" \
-v ./aska/server:/home/steam/aska_server \
-v ./aska/saves:/aska-saves \
jimbit0/aska-dedicated-server:unstable
Do not skip the stop timeout. Good practice.
First boot downloads the server from Steam, expect several minutes before the container reports healthy. The healthcheck allows a 180-second start period.
ASKA_SAVE_ID is not setsteam (UID 1000)unstable tag, so Proton can use fsync| Variable | Description |
|---|---|
ASKA_DISPLAY_NAME | Name shown in server browser |
ASKA_SERVER_NAME | Internal server identifier |
ASKA_AUTH_TOKEN | Steam Game Server Login Token (manage here, App ID: 1898300) |
App ID 1898300 is the base game and is the one to use when generating a GSLT.
ASKA_SAVE_ID controls which world the server loads. Resolution order:
| Priority | Source | Behaviour |
|---|---|---|
| 1 | ASKA_SAVE_ID env var | Always wins if set |
| 2 | server.properties.docker.txt | Checked if env is empty |
| 3 | Folder scan | Picks the newest savegame_* folder in /aska-saves |
| 4 | Generation | Creates a new world |
Starting fresh , leave ASKA_SAVE_ID empty. The server generates a new world.
Loading an existing save :
savegame_* folder into the saves volume and clear any stale save id
value from server.properties.docker.txt (otherwise the server tries to load the old ID).ASKA_SAVE_ID to the folder suffix, e.g. 0fef8_181125131111 for a folder named
savegame_0fef8_181125131111.Migrating from Windows : copy the savegame_* folders from
%USERPROFILE%\AppData\LocalLow\Sand Sailor Studio\Aska\data\server\ into the saves volume.
| Variable | Default | Description |
|---|---|---|
ASKA_PASSWORD | "" | Join password (empty = open) |
ASKA_REGION | "default" | default, Asia, EU, US, etc. |
ASKA_MODE | "normal" | Game mode (see properties file) |
ASKA_MAX_PLAYERS | "4" | Concurrent players |
ASKA_SEED | "" | World generation seed |
ASKA_KEEP_WORLD_ALIVE | "false" | Keep world running with no players |
ASKA_AUTOSAVE_STYLE | "every morning" | every morning, frequent, manual |
ASKA_STEAM_GAME_PORT | "27015" | Game port inside the container |
ASKA_STEAM_QUERY_PORT | "27016" | Steam query port inside the container |
Only non-empty values are written to the properties file, so anything you leave unset keeps the game's own default.
| Variable | Default | Description |
|---|---|---|
ASKA_WORKER_THREADS | "" (auto) | Unity worker threads (auto = effective cores − 1, minimum 2) |
ASKA_MAX_CPU_CORES | "16" | Caps the core count Unity is told about. No effect on experimental |
ASKA_ENABLE_PROFILING | "false" | true = write a Unity profiler log to logs/profiler.log |
ASKA_XVFB_SCREEN | "800x600x16" | Virtual display geometry |
| Variable | Default | Description |
|---|---|---|
ASKA_SKIP_STEAM_UPDATE | "0" | 1 = skip game update on start |
ASKA_STEAM_VALIDATE | "0" | 1 = validate game files (slower) |
ASKA_SAVE_BACKUP | "0" | 1 = backup saves on start |
ASKA_KEEP_SAVES | "3" | Backups to retain |
ASKA_CRASH_PATTERN | "" | Replaces the built-in crash pattern list with this single pattern |
ASKA_CRASH_LOG_LINES | "30" | Log lines captured into a crash report |
ASKA_PROPERTIES_FILENAME | "server.properties.docker.txt" | Properties file name inside the server volume |
TZ | — | Container timezone, e.g. Asia/Kuala_Lumpur. Affects log and backup-file timestamps. Unset = UTC |
ASKA_CRASH_PATTERN replaces, it does not add. Leaving it empty keeps the full built-in list;
setting it means that string is the only pattern watched for. To disable pattern-based detection
entirely (exit-code detection still applies):
environment:
ASKA_CRASH_PATTERN: "NEVER_MATCH_THIS_STRING"
Restart behaviour is handled by Docker's restart policy.
With ASKA_SAVE_BACKUP=1 a single tar.gz is taken at startup, before the server launches:
/aska-saves/backups/backup_<save_id>_YYYYmmdd_HHMMSS.tar.gzASKA_KEEP_SAVES newest for that save ID| Container Path | Purpose |
|---|---|
/home/steam/aska_server | Game binaries, config, logs |
/aska-saves | World saves, backups, crash reports |
Both must be writable by UID 1000.
services:
aska:
image: jimbit0/aska-dedicated-server:unstable
container_name: aska-server
restart: unless-stopped
# Shutdown saves the world and can take up to 75s.
stop_grace_period: 90s
ports:
- "27015:27015/udp"
- "27016:27016/udp"
environment:
ASKA_DISPLAY_NAME: "My ASKA Server"
ASKA_SERVER_NAME: "my-server-01"
ASKA_AUTH_TOKEN: "YOUR_TOKEN_HERE"
ASKA_SAVE_ID: ""
ASKA_PASSWORD: ""
ASKA_REGION: "default"
ASKA_MAX_PLAYERS: "4"
ASKA_SAVE_BACKUP: "1"
ASKA_KEEP_SAVES: "3"
volumes:
- /opt/aska/server:/home/steam/aska_server
- /opt/aska/saves:/aska-saves
deploy:
resources:
limits:
cpus: "8"
memory: 8G
reservations:
cpus: "4"
memory: 4G
The memory limit is not just a cap, jemalloc's page-reclaim decay is banded from it at startup:
| effective memory | dirty_decay_ms / muzzy_decay_ms |
|---|---|
| ≤ 4 GB | 5000 — reclaim aggressively |
| 4–8 GB | 15000 |
| > 8 GB | 30000 — reclaim lazily |
--interval=30s --timeout=10s --start-period=180s --retries=3
Healthy requires both that the AskaServer.exe process is alive and that the game has logged
The session is now open!.
# Container output (entrypoint + server)
docker logs -f aska-server
# Game log only
docker exec aska-server tail -f /home/steam/aska_server/logs/aska_game_output.log
# Proton/Wine stdout
docker exec aska-server tail -f /home/steam/aska_server/logs/proton_stdout.log
All logs live in /home/steam/aska_server/logs/ Each is rotated one deep to <name>.old on startup.
| File | Contents |
|---|---|
aska_game_output.log | Unity/game log |
proton_stdout.log | stdout/stderr of the game process |
xvfb.log | Virtual display |
wine_wineboot.log | Wine prefix creation |
proton_regfix.log | Registry fix (named wine_regfix.log on experimental) |
steamcmd_update.log, steamcmd_selfcheck.log | SteamCMD |
crash_YYYYMMDD_HHMMSS.log | Per-crash capture |
profiler.log | Only with ASKA_ENABLE_PROFILING=true |
If the previous run crashed, the container prints a summary on next boot:
╔══════════════════════════════════════════════════════════╗
║ PREVIOUS CRASH DETECTED ║
╠══════════════════════════════════════════════════════════╣
║ Time: 2025-12-28 12:33:03 ║
║ Type: SIGKILL (137) ║
║ Cause: OOM killer or forced termination ║
╚══════════════════════════════════════════════════════════╝
Common types: SIGTERM (143) — docker stop timeout or external kill. SIGKILL (137) — OOM
killer. Log Pattern Match — game-level crash detected in output. Exit codes 143 and 130 following
a clean shutdown are not treated as crashes.
ss -ulnp | grep 27015TZ; unset, the container runs in UTC| Component | unstable | experimental |
|---|---|---|
| Base OS | Debian 13 (Trixie) Slim | Alpine |
| Windows runtime | GE-Proton11-6 | Alpine musl-native Wine |
| Launch | proton run AskaServer.exe | wine64 AskaServer.exe |
| Display | Xvfb (headless) | Xvfb (headless) |
| Memory | Jemalloc preloaded | Jemalloc preloaded |
| Wine fsync | enabled | not supported |
| Init | tini (PID 1) | tini (PID 1) |
| Stop signal | SIGTERM, up to 75s graceful | SIGTERM, up to 75s graceful |
Both launch the game with -batchmode -nographics. Crash detection watches for
Disconnected from chat with reason DisconnectByClientLogic, Fatal error, Segmentation fault,
Stack overflow, OutOfMemoryException, Application will be terminated and Crash!!!, alongside
exit codes. State persists in /aska-saves/.last_crash.
| Tag | Description |
|---|---|
unstable | Debian 13 + Proton-GE. |
experimental | Alpine + musl-native Wine. |
MIT. Not affiliated with Sand Sailor Studio or Valve.
Last Updated: 2026-09-05
Image Versions: unstable 0.2.1 · experimental 0.2.1
Maintainer: jimbit
Content type
Image
Digest
sha256:95f35a478…
Size
256.5 MB
Last updated
about 1 month ago
docker pull jimbit0/aska-dedicated-server:experimental