A Docker image for the Killing Floor Dedicated Server, packaged with the custom launcher KFDSL and based on Debian (bookworm-slim).
This image allows you to deploy a KF server with minimal configuration - no manual file editing required.
Environment variables • Steam Authentication • Usage • Using Compose • Manual build • See also • License
Environment variables can be provided when creating a container to configure Steam, the server, and the launcher:
Click to expand
Variable | Default Value | Description |
---|---|---|
STEAMACC_USERNAME | anonymous |
(Required) Steam account username. |
STEAMACC_PASSWORD | (Required) Steam account password ( |
Variable | Default Value | Description |
---|---|---|
KF_CONFIG | KillingFloor.ini |
Server configuration file. |
KF_SERVERNAME | KF Server |
Name of the server. |
KF_SHORTNAME | KFS |
Short name (alias) for the server. |
KF_PORT | 7707 |
Game server port. |
KF_WEBADMINPORT | 8075 |
Web admin panel port. |
KF_GAMESPYPORT | 7717 |
GameSpy query port. |
KF_GAMEMODE | survival |
Game mode (survival, objective, toymaster ). |
KF_MAP | KF-BioticsLab |
Map to start the server on. |
KF_DIFFICULTY | hard |
Game difficulty level (easy, normal, hard, suicidal, hell ). |
KF_LENGTH | medium |
Game length (short, medium, long ). |
KF_FRIENDLYFIRE | 0.0 |
Friendly fire multiplier (0.0 = off, 1.0 = full damage). |
KF_MAXPLAYERS | 6 |
Maximum number of players. |
KF_MAXSPECTATORS | 6 |
Maximum number of spectators. |
KF_PASSWORD | Server Password (empty = no password). |
|
KF_REGION | 1 |
Server region. |
KF_ADMINNAME | Administrator name. | |
KF_ADMINMAIL | Administrator email address. | |
KF_ADMINPASSWORD | Administrator password. | |
KF_MOTD | Message of the day. | |
KF_SPECIMENTYPE | default |
ZEDs type (default, summer, halloween, christmas ). |
KF_MUTATORS | Command-line mutators list. | |
KF_SERVERMUTATORS | Server-side mutators list (ServerActors ). |
|
KF_REDIRECTURL | URL for fast download redirection. | |
KF_MAPLIST | all |
List of available maps for the current game (all = all available maps). |
KF_WEBADMIN | false |
Enable or disable the web admin panel. |
KF_MAPVOTE | false |
Enable or disable map voting. |
KF_MAPVOTE_REPEATLIMIT | 1 |
Number of maps to be played before a repeat. |
KF_ADMINPAUSE | false |
Allow administrators to pause the game. |
KF_NOWEAPONTHROW | false |
Prevent weapons from being thrown on the ground. |
KF_NOWEAPONSHAKE | false |
Disable weapon shake effect. |
KF_THIRDPERSON | false |
Enable third-person view (F4). |
KF_LOWGORE | false |
Disable gore system (no dismemberment). |
KF_UNCAP | false |
Uncap the framerate (requires client-side tweaks too). |
KF_UNSECURE | false |
Start the server without Valve Anti-Cheat (VAC). |
KF_NOSTEAM | false |
Bypass SteamCMD and start the server immediately. |
KF_NOVALIDATE | false |
Skip server files integrity check. |
KF_AUTORESTART | false |
Automatically restart the server if it crashes. |
KF_MUTLOADER | false |
Enable MutLoader (inline mutator). |
KF_KFPATCHER | false |
Enable KFPatcher (server mutator). |
KF_HIDEPERKS | false |
KFPatcher: Hide perks. |
KF_NOZEDTIME | false |
KFPatcher: Disable ZED Time (slow-motion). |
KF_BUYEVERYWHERE | false |
KFPatcher: Allow buying weapons anywhere. |
KF_ALLTRADERS | false |
KFPatcher: Keep all traders open. |
KF_ALLTRADERS_MESSAGE | "^wAll traders are ^ropen^w!" |
KFPatcher: Message displayed when all traders are open. |
KF_LOG_TO_FILE | false |
Enable logging to a file. |
KF_LOG_LEVEL | info |
Logging level (info, debug, warn, error ). |
KF_LOG_FILE | ./kfdsl.log |
Path to the log file. |
KF_LOG_FILE_FORMAT | text |
Format of the log file (text, json ). |
KF_LOG_MAX_SIZE | 10 |
Maximum log file size in MB. |
KF_LOG_MAX_BACKUPS | 5 |
Maximum number of old log files to retain. |
KF_LOG_MAX_AGE | 28 |
Maximum log file age in days. |
KF_EXTRAARGS | Extra arguments passed to the server. |
To download and update the server files, it is required to provide both a valid Steam username and password.
It is strongly recommended to create a secondary Steam account without Steam Guard specifically for the server.
Using your main Steam account is NOT recommended.
Steam credentials can be provided by using:
- Environment Variables (
⚠️ NOT Recommended)
STEAMACC_USERNAME
: Your Steam login username.STEAMACC_PASSWORD
: Your Steam login password.- Credentials stored as environment variables may be exposed in logs or container metadata.
- Docker Secrets (✅ Recommended)
- Using Docker secrets ensures that your credentials are securely stored and not exposed in environment variables.
- To use Docker secrets, create a secret file and pass it to the container.
- Your username secret must be named
steamacc_username
and your passwordsteamacc_password
. - Example command to create a Docker secret for the password:
echo "<YOUR_STEAM_PASSWORD>" | docker secret create steamacc_password -
- Docker Compose Secrets (✅ Recommended)
- If using Docker Compose, you can mount secrets from a file to keep credentials secure.
- Create a
steam_username.txt
file containing only the account username. - Create a
steam_password.txt
file containing only the account password. - See the Compose section.
In all examples, the Steam
username
is set using anenvironment variable
, while thepassword
is stored in thesteam_password.txt
file located in the current working directory.
Example 1:
Run a public Survival
server with custom names
, set to Suicidal
difficulty on a long-length
game, and starting on KF-WestLondon
:
docker run -d \
--name kfserver \
-p 7707:7707/udp \
-p 7708:7708/udp \
-p 28852:28852/udp \
-p 28852:28852/tcp \
-p 20560:20560/tcp \
-p 20560:20560/udp \
-e STEAMACC_USERNAME="<STEAM_USERNAME>" \
-e KF_SERVERNAME="KF Server [Suidical] [Long]" \
-e KF_SHORTNAME="KFS" \
-e KF_MAP="KF-WestLondon" \
-e KF_DIFFICULTY="suicidal" \
-e KF_LENGTH="long" \
-v $(pwd)/steam_password.txt:/run/secrets/steamacc_password \
-i k4rian/killingfloor
Example 2:
Run a password-protected server in Objective
mode, with map voting
enabled, set to Hard
difficulty on a medium-length
game, and starting on KFO-Steamland
:
docker run -d \
--name kfserver-objective \
-p 7707:7707/udp \
-p 7708:7708/udp \
-p 28852:28852/udp \
-p 28852:28852/tcp \
-p 20560:20560/tcp \
-p 20560:20560/udp \
-e STEAMACC_USERNAME="<STEAM_USERNAME>" \
-e KF_SERVERNAME="KF Server [Objective] [Hard] [Medium]" \
-e KF_SHORTNAME="OKFS" \
-e KF_GAMEMODE="objective" \
-e KF_MAP="KFO-Steamland" \
-e KF_DIFFICULTY="hard" \
-e KF_LENGTH="medium" \
-e KF_PASSWORD="<16_CHARACTERS_MAX_PASSWORD>" \
-e KF_MAPVOTE="true" \
-v $(pwd)/steam_password.txt:/run/secrets/steamacc_password \
-i k4rian/killingfloor
Example 3:
Run a public Toy Master
server using a custom configuration file
, map voting
and web admin panel
enabled, set to Hell on Earth
difficulty on a short-length
game:
docker run -d \
--name kfserver-toymaster \
-p 7707:7707/udp \
-p 7708:7708/udp \
-p 28852:28852/udp \
-p 28852:28852/tcp \
-p 8075:8075/tcp \
-p 20560:20560/tcp \
-p 20560:20560/udp \
-e STEAMACC_USERNAME="<STEAM_USERNAME>" \
-e KF_CONFIG="ToyGame.ini" \
-e KF_SERVERNAME="KF Server [Toy Master] [HoE] [Short]" \
-e KF_SHORTNAME="TMKFS" \
-e KF_GAMEMODE="toymaster" \
-e KF_MAP="TOY-DevilsDollhouse" \
-e KF_DIFFICULTY="hell" \
-e KF_LENGTH="short" \
-e KF_ADMINPASSWORD="<16_CHARACTERS_MAX_PASSWORD>" \
-e KF_WEBADMIN="true" \
-e KF_MAPVOTE="true" \
-v $(pwd)/steam_password.txt:/run/secrets/steamacc_password \
-i k4rian/killingfloor
Requirements:
— Docker >= 18.09.0
— Git (optional)
Like any Docker image the building process is pretty straightforward:
- Clone (or download) the GitHub repository to an empty folder on your local machine:
git clone --depth 1 https://github.com/K4rian/docker-killingfloor.git .
- Then run the following command inside the newly created folder:
docker build --no-cache -t k4rian/killingfloor .
- docker-steamcmd: The base image used by this project.
- kfdsl: A custom launcher for the KF Dedicated Server, written in Go.
- kfrs: A secure HTTP redirect server for the KF Dedicated Server, written in Go.