A base Docker image for Valve's Source Dedicated Server (srcds).
1.7K
A base Docker image for Valve's Source Dedicated Server (srcds) based on Debian (bookworm-slim) used to setup and run any Source Dedicated Server including Counter-Strike: Source (CSS), Left 4 Dead 1/2, Team Fortress 2, Garry's Mod and more.
| Docker Tag | Version | Platform | Description |
|---|---|---|---|
| latest | 1.1 | amd64 | Base image |
| sftp | 1.1 | amd64 | Base image with SFTP support |
| latest-buster | 1.0 | amd64 | Base image (Buster) (Deprecated) |
| sftp-buster | 1.0 | amd64 | Base image with SFTP support (Buster) (Deprecated) |
Some environment variables can be tweaked when creating a container to define the server application to interact with:
| Variable | Default value | Description |
|---|---|---|
| APPID | 232370 | Steam application identifier (used by steamcmd). |
| APPNAME | hl2mp | Game name acronym (used by srcds). |
| STEAMACC_USERNAME | anonymous | (Optional) Steam account username. |
| STEAMACC_PASSWORD | (Optional) Steam account password (NOT recommended, see the section below). |
Default values will setup a Half-Life 2: Deathmatch Dedicated Server.
Some server applications require a valid Steam account in order for the files to be downloaded/updated and, in some cases, the corresponding game to be purchased/added on the said account.
The credentials can be provided using environment variables or a Docker secret (password only).It is strongly recommended to create a new account (or use a secondary one) with a dedicated email and Steam Guard disabled. Do NOT use your main account!
See the Dedicated Servers List on the Valve Developer Wiki for more information about each server requirements.
The STEAMACC_USERNAME environment variable holds the Steam account username.
The (clear, unencrypted) Steam account password can be defined by:
Bind mount a text file containing the password into the container.
/run/secrets/srcds.Using the STEAMACC_PASSWORD environment variable when creating the container.
docker inspect to any user that can use the docker command.A convenient script has been added to interact with steamcmd and srcds in various ways.
It will intercept the first passed argument and do the following:
-s|-start
srcds_run-u|-update
steamcmd-v|-validate
steamcmd-to|takeown
steam user-c|-steamcmd
steamcmd directly without interacting with srcds[none]
-autoupdate, -steam_dir and -steamcmd_script arguments)Example 1:
Setup and run a Counter-Strike: Source public server:
— Since no recognized argument is passed to the startup script, the server will start using the auto-update feature and also auto-restart if it crashes
docker run -d \
--name css-serv \
--net=host \
-e APPID=232330 \
-e APPNAME=cstrike \
-i k4rian/srcds \
-console \
-secure \
-port 27015 \
-maxplayers 10 \
+map de_dust2
Example 2:
Download and validate the Left 4 Dead 2 Dedicated Server files to a named volume for further use:
— The container will be deleted immediately after the task is completed
— Notice the -validate argument passed to the startup script
docker run --rm \
-e APPID=222860 \
-e APPNAME=left4dead2 \
-v l4d2serv_data:/home/steam/gameserver \
-i k4rian/srcds \
-validate
Now we can create a named container to start the server (in co-op mode) using the previously created volume:
— Since the -start argument is given, the startup script won't trigger any update
docker run -d \
--name l4d2serv \
--net=host \
-e APPID=222860 \
-e APPNAME=left4dead2 \
-v l4d2serv_data:/home/steam/gameserver \
-i k4rian/srcds \
-start \
-console \
-secure \
-port 27015 \
+map c1m1_hotel \
+maxplayers 4
If we want to perform a manually update (without validating the files), we can use an ephemeral container to handle the task:
— The container will be deleted immediately after the task is completed
— Notice the -update argument passed to the startup script
docker run --rm \
-e APPID=222860 \
-e APPNAME=left4dead2 \
-v l4d2serv_data:/home/steam/gameserver \
-i k4rian/srcds \
-update
Finally, if the server has permission issues with some files, we can use an ephemeral container again to recursively change
ownership of all server files:
— The container will be deleted immediately after the task is completed
— Notice the -takeown argument passed to the startup script
docker run --rm \
-v l4d2serv_data:/home/steam/gameserver \
-i k4rian/srcds \
-takeown
Example 3:
Setup and run a Team Fortress 2 Dedicated Server and store all the files inside a named volume created on the fly:
— The startup script will perform a update check (without validation) on each start
— You need a valid GSLT token to make the server reachable
docker run -d \
--name tf2serv \
--net=host \
-e APPID=232250 \
-e APPNAME=tf \
-v tf2serv_data:/home/steam/gameserver \
-i k4rian/srcds \
-console \
-secure \
-timeout 0 \
-port 27015 \
+randommap \
+maxplayers 24 \
+sv_pure 1 \
+sv_setsteamaccount {GSLT_TOKEN}
Example 4:
Setup and run a No More Room In Hell Dedicated Server using a valid Steam account:
— In this example, the password is stored in the secret.txt file located in the current working directory.
— The game has to be present on the Steam account or the installation will fail
docker run -d \
--name nmrihserv \
--net=host \
-e APPID=317670 \
-e APPNAME=nmrih \
-e STEAMACC_USERNAME="{VALID_STEAM_USERNAME}" \
-v "$(pwd)"/secret.txt:/run/secrets/srcds:ro \
-v nmrihserv_data:/home/steam/gameserver \
-i k4rian/srcds \
-console \
-secure \
-maxplayers 8 \
-port 27015 \
+map nmo_broadway
Requirements:
— Docker >= 18.09.0
— Git (optional)
Like any Docker image the building process is pretty straightforward:
git clone https://github.com/K4rian/docker-srcds.git .
docker build --no-cache -t k4rian/srcds:latest .
Content type
Image
Digest
sha256:57ad03acd…
Size
44.5 MB
Last updated
over 2 years ago
docker pull k4rian/srcds