A flexible base image for running any Steam dedicated game server via SteamCMD — including Windows servers via Wine. Built on Ubuntu 22.04, rebuilt daily to stay up to date.
Linux server (e.g. Valheim):
docker run -d \
-e STEAM_APP_ID=896660 \
-e SERVER_DIR="/home/steam/servers/valheim" \
-e SERVER_START_CMD="./valheim_server.x86_64 -name \$SERVER_NAME -port \$PORT -world \$WORLD_NAME -password \$SERVER_PASSWORD" \
-e PORT=2456 \
-e SERVER_NAME="My Server" \
-e WORLD_NAME="MyWorld" \
-e SERVER_PASSWORD="secret" \
-p 2456-2458:2456-2458/udp \
psauxw/steamcmd
Windows server (e.g. V Rising):
docker run -d \
-e STEAM_APP_ID=1829350 \
-e WINDOWS_SERVER=true \
-e SERVER_DIR="/home/steam/servers/vrising" \
-e SERVER_START_CMD="VRisingServer.exe -persistentDataPath /home/steam/servers/vrising/save-data -serverName \$SERVER_NAME -gamePort \$PORT -serverPassword \$SERVER_PASSWORD" \
-e PORT=9876 \
-e SERVER_NAME="My V Rising Server" \
-e SERVER_PASSWORD="secret" \
-p 9876:9876/udp \
-p 9876:9876/tcp \
-p 9877:9877/tcp \
psauxw/steamcmd
| Variable | Default | Description |
|---|---|---|
STEAM_APP_ID | (required) | Steam dedicated server App ID |
SERVER_START_CMD | (required) | Command to launch the server. Supports $VAR references |
STEAM_USER | anonymous | Steam login username |
STEAM_PASS | (empty) | Steam login password |
SERVER_DIR | /home/steam/servers/game | Where the server files are installed |
SERVER_PORTS | (empty) | Comma-separated ports for display, e.g. 27015/udp,27015/tcp |
AUTO_UPDATE | true | Check for updates on every start. Set to false for faster restarts |
WINDOWS_SERVER | false | Set to true to run a Windows dedicated server via Wine |
services:
valheim:
image: psauxw/steamcmd
restart: unless-stopped
environment:
STEAM_APP_ID: "896660"
SERVER_DIR: "/home/steam/servers/valheim"
PORT: "2456"
SERVER_NAME: "My Valheim Server"
WORLD_NAME: "MyWorld"
SERVER_PASSWORD: "${SERVER_PASSWORD}"
AUTO_UPDATE: "true"
SERVER_PORTS: "2456/udp,2457/udp,2458/udp"
SERVER_START_CMD: >
./valheim_server.x86_64
-name $$SERVER_NAME
-port $$PORT
-world $$WORLD_NAME
-password $$SERVER_PASSWORD
ports:
- "2456-2458:2456-2458/udp"
volumes:
- ./gamedata:/home/steam/servers
services:
vrising:
image: psauxw/steamcmd
restart: unless-stopped
environment:
STEAM_APP_ID: "1829350"
SERVER_DIR: /home/steam/servers/vrising
WINDOWS_SERVER: "true"
AUTO_UPDATE: "true"
SERVER_PORTS: 9876/udp,9876/tcp,9877/tcp
PORT: "9876"
SERVER_NAME: "My V Rising Server"
SERVER_PASSWORD: "${SERVER_PASSWORD}"
SERVER_START_CMD: >
VRisingServer.exe -persistentDataPath
/home/steam/servers/vrising/save-data -serverName $$SERVER_NAME
-gamePort $$PORT -serverPassword $$SERVER_PASSWORD
ports:
- 9876:9876/udp
- 9876:9876/tcp
- 9877:9877/tcp
volumes:
- ./vrising-data:/home/steam/servers
Note: In Docker Compose, use
$$VAR(double dollar sign) insideSERVER_START_CMDto prevent Compose from expanding variables before passing them to the container. Store secrets likeSERVER_PASSWORDin a.envfile next to yourdocker-compose.yml.
Setting WINDOWS_SERVER=true enables Wine support for games that only ship a Windows dedicated server binary. The Wine prefix is pre-initialized inside the image — no extra setup or volumes required. Just set the flag and point SERVER_START_CMD at the .exe.
You do not need to mount a Wine volume. Only mount a volume for your game data:
volumes:
- ./gamedata:/home/steam/servers
Mount a volume so save files and configs survive restarts:
-v ./gamedata:/home/steam/servers
Look up any game's dedicated server App ID at steamdb.info.
Content type
Image
Digest
sha256:d8bd1569d…
Size
1.7 GB
Last updated
about 16 hours ago
docker pull psauxw/steamcmd