Valheim Server in a Docker Container
The name of the Docker image is
Volume mount the server config directory to
/config within the Docker container.
If you have an existing world on a Windows system you can copy it from e.g.
and run the image with
$HOME/valheim-server-config volume mounted to
/config inside the container.
$ mkdir -p $HOME/valheim-server-config/worlds # copy existing world $ docker run -d \ --name valheim-server \ -p 2456-2458:2456-2458/udp \ -v $HOME/valheim-server-config:/config \ -e SERVER_NAME="My Server" \ -e WORLD_NAME="Neotopia" \ -e SERVER_PASS="secret" \ lloesche/valheim-server
SERVER_PASS must be at least 5 characters long. Otherwise
valheim_server.x86_64 will refuse to start!
A fresh start will take several minutes depending on your Internet connection speed as the container will download the Valheim dedicated server from Steam (~1 GB).
Do not forget to modify
WORLD_NAME to reflect the name of your world! For existing worlds that is the filename in the
worlds/ folder without the
If you want to play with friends over the Internet and are behind NAT make sure that UDP ports 2456-2458 are forwarded to the container host. Also ensure they are publicly accessible in any firewall.
If your server name does not show up in the server list a couple of minutes after startup you likely have a firewall issue.
There is more info in section Finding Your Server.
For LAN-only play see section Steam Server Favorites & LAN Play
For more deployment options see the Deployment section.
||Name that will be shown in the server browser|
||UDP start port that the server will listen on|
||Name of the world without
||Password for logging into the server - min. 5 characters!|
||Whether the server should be listed in the server browser (
||How often we check Steam for an updated server version in seconds|
||Cron schedule for server restarts (disabled if set to an empty string)|
||Whether the server should create periodic backups (
||Interval in seconds between backup runs|
||Path to the backups directory|
||Age in days after which old backups are flushed|
||Unix permissions for the backup directory|
||Unix permissions for the backup zip files|
||Unix permissions for the /config directory|
||Unix permissions for the /config/worlds directory|
||Unix permissions for the files in /config/worlds|
||Additional steamcmd CLI arguments|
||First DNS server to use for the container to resolve hostnames (systemd only)|
||Second DNS server to use for the container to resolve hostnames (systemd only)|
Create an optional config file
SERVER_NAME="My Server" SERVER_PORT=2456 WORLD_NAME=Dedicated SERVER_PASS=secret SERVER_PUBLIC=1 DNS_1=18.104.22.168 DNS_2=22.214.171.124
Then enable the Docker container on system boot
$ sudo mkdir /etc/valheim $ sudo curl -o /etc/systemd/system/valheim-server.service https://raw.githubusercontent.com/lloesche/valheim-server-docker/master/valheim-server.service $ sudo systemctl daemon-reload $ sudo systemctl enable valheim-server.service $ sudo systemctl start valheim-server.service
Kubernetes manifests using this container image, along with a helm chart, are available from the following repository: https://github.com/Addyvan/valheim-k8s
The chart is also available directly using:
helm repo add valheim-k8s https://addyvan.github.io/valheim-k8s/ helm repo update helm install valheim-server valheim-k8s/valheim-k8s # see repo for full config
CDK Project for spinning up a Valheim game server on AWS Using ECS Fargate and Amazon EFS is available here: https://github.com/rileydakota/valheim-ecs-fargate-cdk
By default the container will check for Valheim server updates every 15 minutes.
If an update is found it is downloaded and the server restarted.
This interval can be changed using the
UPDATE_INTERVAL environment variable.
The container will on startup and periodically create a backup of the
The default is once per hour but can be changed using the
BACKUPS_INTERVAL environment variable.
The number is in seconds. Meaning for hourly backups set
Default backup directory is
/config/backups/ within the container. A different directory can be set using the
BACKUPS_DIRECTORY environment variable.
It makes sense to have this directory be a volume mount from the host.
Warning: do not make the backup directory a subfolder of
/config/worlds/. Otherwise each backup will backup all previous backups.
By default 3 days worth of backups will be kept. A different number can be configured using
BACKUPS_MAX_AGE. The value is in days.
Beware that backups are performed while the server is running. As such files might be in an open state when the backup runs.
worlds/ directory also contains a
.db.old file for each world which should always be closed and in a consistent state.
Once the server is up and running and the log says something like
02/09/2021 10:42:24: Game server connected
it can still be challenging to actually find the server.
There are three ways of getting to your server. Either using the Steam server browser, adding the IP manually or using the in-game
Community server list.
When in-game, click on
Join Game and select
Community. Wait for the game to load the list of all 4000+ servers.
Only 200 servers will be shown at a time so we will have to enter part of our server name to filter the view.
When using the Steam server browser, in Steam go to
View -> Servers. Click on
CHANGE FILTERS and select Game
Wait for Steam to load all 4000+ Servers then sort the
SERVERS column by clicking on its title. Scroll down until you find your server.
From there you can right-click it and add as a favourite.
Note that in my tests when connecting to the server via the Steam server browser I had to enter the server password twice. Once in Steam and once in-game.
A third option within Steam is to add the server manually by IP. This also allows for LAN play without the need to open or forward any firewall ports.
View -> Servers
FIND GAMES AT THIS ADDRESS...
ADD SELECTED GAME SERVER TO FAV...
Do not use the
ADD THIS ADDRESS TO FAVORITES button at this point.
NOTE: Sometimes I will get the following error when trying to connect to a LAN server:
In those cases it sometimes helped to add the server again, but this time using port
2456 and now pressing the
ADD THIS ADDRESS TO FAVORITES button.
It will not generate a new entry in the favourites list but seemingly just update the existing one that was originally discovered on port
Sometimes it also helps to press the
REFRESH button and then immediately double click on the Server.
Overall LAN play via the Steam Server Browser has been a bit hit and miss for me while online play using the in-game search has resulted in the most consistent success.
Upon startup the server will create a file
/config/adminlist.txt. In it you can list the IDs of all administrator users.
The ID of a user can be gotten either in-game by pressing F2
or in the server logs when a user connects.
Administrators can press F5 to open the in-game console and use commands like
This is not an extensive tutorial, but I hope these screenshots can be helpful. Beware that the server can use multiple GB of RAM and produces a lot of CPU load.
The process of updating the image clears all data stored inside the container. So before doing a container image upgrade, make absolutely sure that
/config, which contains your world, is an external volume stored on your NAS (Step 4 of the First install process). It is also a good idea to copy the latest version of the world backup to another location, like your PC.