Important
This is a fork which has stricter dependency verison pinning enabled with Renovate managing them. If you've stumbled upon this repository, you probably want the upstream repository which can be found at https://github.com/thijsvanloef/palworld-server-docker.
This fork also disables Discord messages, always runs as user steam
(PID/GID 1000
), and disables auto updates.
Additionally, it also does not require the game files be stored in a Docker volume, instead requiring only saves
to be stored. This fork uses an ARM64 + AMD64 unified SteamCMD located at https://github.com/USA-RedDragon/steamcmd/
By default this fork will wait up to 5 minutes for players to exit before terminating. This includes when Kubernetes
terminates the pod, when you run docker compose down
, docker stop
, or when using automatic reboots (daily reboots
in the Helm chart). During this time it will broadcast via rcon once a minute to warn players that a shutdown is imminent.
This fork places saves at /saves
and backups at /backups
in the container.
A fork of the Helm chart is hosted at https://charts.mcswain.dev/charts/palworld/. This fork takes advantage of the persistence changes and uses a readiness and liveness probe by default to check the health of your deployment.
The Palworld server is packaged into this image and only updates to the image change the Palworld server version. This is accomplished by https://github.com/USA-RedDragon/palworld-server containing an hourly CI job to check for new Palworld build IDs and publishing the relevant files to GitHub Releases. This avoids issues where Palworld releases an update that breaks the way the Docker image expects it to behave, like as seen in the v0.1.5.0 update.
Tip
Unsure how to get started? Check out this guide thijsvanloef wrote!
This is a Docker container to help you get started with hosting your own Palworld dedicated server.
This Docker container has been tested and will work on the following OS:
- Linux (Ubuntu/Debian)
- Windows 10,11
- MacOS (including Apple Silicon M1/M2/M3).
This container has also been tested and will work on both x64
and ARM64
based CPU architecture.
Important
At the moment, Xbox GamePass/Xbox Console players will not be able to join a dedicated server.
They will need to join players using the invite code and are limited to sessions of 4 players max.
Resource | Minimum | Recommended |
---|---|---|
CPU | 4 cores | 4+ cores |
RAM | 16GB | Recommend over 32GB for stable operation |
Storage | 8GB | 20GB |
Keep in mind that you'll need to change the environment variables.
This repository includes an example docker-compose.yml file you can use to set up your server.
services:
palworld:
image: ghcr.io/usa-reddragon/palworld-server-docker:latest
restart: unless-stopped
container_name: palworld-server
stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop
ports:
- 8211:8211/udp
- 27015:27015/udp
environment:
PORT: 8211 # Optional but recommended
PLAYERS: 16 # Optional but recommended
SERVER_PASSWORD: "worldofpals" # Optional but recommended
MULTITHREADING: true
RCON_ENABLED: true
RCON_PORT: 25575
TZ: "UTC"
ADMIN_PASSWORD: "adminPasswordHere"
COMMUNITY: false # Enable this if you want your server to show up in the community servers tab, USE WITH SERVER_PASSWORD!
SERVER_NAME: "World of Pals"
SERVER_DESCRIPTION: "palworld-server-docker by Thijs van Loef"
volumes:
- ./saves:/saves/
As an alternative, you can copy the .env.example file to a new file called .env file. Modify it to your needs, check out the environment variables section to check the correct values. Modify your docker-compose.yml to this:
services:
palworld:
image: ghcr.io/usa-reddragon/palworld-server-docker:latest
restart: unless-stopped
container_name: palworld-server
stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop
ports:
- 8211:8211/udp
- 27015:27015/udp
env_file:
- .env
volumes:
- ./saves:/saves/
Change every <> to your own configuration
docker run -d \
--name palworld-server \
-p 8211:8211/udp \
-p 27015:27015/udp \
-v ./saves:/saves/ \
-e PORT=8211 \
-e PLAYERS=16 \
-e MULTITHREADING=true \
-e RCON_ENABLED=true \
-e RCON_PORT=25575 \
-e TZ=UTC \
-e ADMIN_PASSWORD="adminPasswordHere" \
-e SERVER_PASSWORD="worldofpals" \
-e COMMUNITY=false \
-e SERVER_NAME="World of Pals" \
-e SERVER_DESCRIPTION="palworld-server-docker by Thijs van Loef" \
--restart unless-stopped \
--stop-timeout 30 \
ghcr.io/usa-reddragon/palworld-server-docker:latest
As an alternative, you can copy the .env.example file to a new file called .env file. Modify it to your needs, check out the environment variables section to check the correct values. Change your docker run command to this:
docker run -d \
--name palworld-server \
-p 8211:8211/udp \
-p 27015:27015/udp \
-v ./saves:/saves/ \
--env-file .env \
--restart unless-stopped \
--stop-timeout 30 \
ghcr.io/usa-reddragon/palworld-server-docker:latest
The Helm chart for this fork can be found at https://charts.mcswain.dev/charts/palworld/
You can use the following values to change the settings of the server on boot. It is highly recommended you set the following environment values before starting the server:
- PLAYERS
- PORT
Variable | Info | Default Values | Allowed Values |
---|---|---|---|
TZ | Timezone used for time stamping backup server | UTC | See TZ Identifiers |
PLAYERS* | Max amount of players that are able to join the server | 16 | 1-32 |
PORT* | UDP port that the server will expose | 8211 | 1024-65535 |
MULTITHREADING** | Improves performance in multi-threaded CPU environments. It is effective up to a maximum of about 4 threads, and allocating more than this number of threads does not make much sense. | false | true/false |
COMMUNITY | Whether or not the server shows up in the community server browser (USE WITH SERVER_PASSWORD) | false | true/false |
PUBLIC_IP | You can manually specify the global IP address of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | x.x.x.x | |
PUBLIC_PORT | You can manually specify the port number of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | 1024-65535 | |
SERVER_NAME | A name for your server | "string" | |
SERVER_DESCRIPTION | Your server Description | "string" | |
SERVER_PASSWORD | Secure your community server with a password | "string" | |
ADMIN_PASSWORD | Secure administration access in the server with a password | "string" | |
RCON_ENABLED*** | Enable RCON for the Palworld server | true | true/false |
RCON_PORT | RCON port to connect to | 25575 | 1024-65535 |
QUERY_PORT | Query port used to communicate with Steam servers | 27015 | 1024-65535 |
BACKUP_CRON_EXPRESSION | Setting affects frequency of automatic backups. | 0 0 * * * | Needs a Cron-Expression - See Configuring Automatic Backups with Cron |
BACKUP_ENABLED | Enables automatic backups | true | true/false |
DELETE_OLD_BACKUPS | Delete backups after a certain number of days | false | true/false |
OLD_BACKUP_DAYS | How many days to keep backups | 30 | any positive integer |
AUTO_REBOOT_CRON_EXPRESSION | Setting affects frequency of automatic updates. | 0 0 * * * | Needs a Cron-Expression - See Configuring Automatic Backups with Cron |
AUTO_REBOOT_ENABLED | Enables automatic reboots | false | true/false |
SHUTDOWN_WARN_SECONDS | How long to wait to reboot the server, after the player were informed. | 300 | integer |
SHUTDOWN_EVEN_IF_PLAYERS_ONLINE | Restart the Server even if there are players online. | false | true/false |
DISABLE_GENERATE_SETTINGS | Whether to automatically generate the PalWorldSettings.ini | false | true/false |
BACKUP_BEFORE_EXIT | Backup the world data before the server stops | true | true/false |
*highly recommended to set
** Make sure you know what you are doing when running this option enabled
*** Required for docker stop to save and gracefully close the server
Port | Info |
---|---|
8211 | Game Port (UDP) |
27015 | Query Port (UDP) |
25575 | RCON Port (TCP) |
RCON is enabled by default for the palworld-server-docker image. Opening the RCON CLI is quite easy:
docker exec -it palworld-server rcon-cli "<command> <value>"
For example, you can broadcast a message to everyone in the server with the following command:
docker exec -it palworld-server rcon-cli "Broadcast Hello everyone"
This will open a CLI that uses RCON to write commands to the Palworld Server.
Command | Info |
---|---|
Shutdown {Seconds} {MessageText} | The server is shut down after the number of Seconds |
DoExit | Force stop the server. |
Broadcast | Send message to all player in the server |
KickPlayer {SteamID} | Kick player from the server.. |
BanPlayer {SteamID} | BAN player from the server. |
TeleportToPlayer {SteamID} | Teleport to current location of target player. |
TeleportToMe {SteamID} | Target player teleport to your current location |
ShowPlayers | Show information on all connected players. |
Info | Show server information. |
Save | Save the world data. |
For a full list of commands go to: https://tech.palworldgame.com/server-commands
To create a backup of the game's save at the current point in time, use the command:
docker exec palworld-server backup
This will create a backup at /backups/
The server will run a save before the backup if rcon is enabled.
To restore from a backup, use the command:
docker exec -it palworld-server restore
The RCON_ENABLED
environment variable must be set to true
to use this command.
Important
If docker restart is not set to policy always
or unless-stopped
then the server will shutdown and will need to be
manually restarted.
The example docker run command and docker compose file in How to Use already uses the needed policy
Locate the backup you want to restore in /backups/
and decompress it.
Need to stop the server before task.
docker compose down
Delete the old saved data folder located at saves/SaveGames/0/<old_hash_value>
.
Copy the contents of the newly decompressed saved data folder SaveGames/0/<new_hash_value>
to saves/SaveGames/0/<new_hash_value>
.
Replace the DedicatedServerName inside saves/Config/LinuxServer/GameUserSettings.ini
with the new folder name.
DedicatedServerName=<new_hash_value> # Replace it with your folder name.
Restart the game. (If you are using Docker Compose)
docker compose up -d
The server is automatically backed up everynight at midnight according to the timezone set with TZ
Set BACKUP_ENABLED enable or disable automatic backups (Default is enabled)
BACKUP_CRON_EXPRESSION is a cron expression, in a Cron-Expression you define an interval for when to run jobs.
Tip
This image uses Supercronic for crons see supercronic or Crontab Generator.
Set BACKUP_CRON_EXPRESSION to change the default schedule.
Example Usage: If BACKUP_CRON_EXPRESSION to 0 2 * * *
, the backup script will run every day at 2:00 AM.
To be able to use automatic reboots with this server RCON_ENABLED enabled.
Important
If docker restart is not set to policy always
or unless-stopped
then the server will shutdown and will need to be
manually restarted.
The example docker run command and docker compose file in How to Use already use the needed policy
Set AUTO_REBOOT_ENABLED enable or disable automatic reboots (Default is disabled)
AUTO_REBOOT_CRON_EXPRESSION is a cron expression, in a Cron-Expression you define an interval for when to run jobs.
Tip
This image uses Supercronic for crons see supercronic or Crontab Generator.
Set AUTO_REBOOT_CRON_EXPRESSION to change the set the schedule, default is everynight at midnight according to the timezone set with TZ
Important
These Environment Variables/Settings are subject to change since the game is still in beta. Check out the official webpage for the supported parameters.
Converting server settings to environment variables follow the same principles (with some exceptions):
- all capital letters
- split words by inserting an underscore
- remove the single letter if the setting starts with one (like 'b')
For example:
- Difficulty -> DIFFICULTY
- PalSpawnNumRate -> PAL_SPAWN_NUM_RATE
- bIsPvP -> IS_PVP
Variable | Description | Default Value | Allowed Value |
---|---|---|---|
DIFFICULTY | Game Difficulty | None | None ,Normal ,Difficult |
DAYTIME_SPEEDRATE | Day time speed - Smaller number means shorter days | 1.000000 | Float |
NIGHTTIME_SPEEDRATE | Night time speed - Smaller number means shorter nights | 1.000000 | Float |
EXP_RATE | EXP earn rate | 1.000000 | Float |
PAL_CAPTURE_RATE | Pal capture rate | 1.000000 | Float |
PAL_SPAWN_NUM_RATE | Pal appearance rate | 1.000000 | Float |
PAL_DAMAGE_RATE_ATTACK | Damage from pals multipiler | 1.000000 | Float |
PAL_DAMAGE_RATE_DEFENSE | Damage to pals multipiler | 1.000000 | Float |
PLAYER_DAMAGE_RATE_ATTACK | Damage from player multipiler | 1.000000 | Float |
PLAYER_DAMAGE_RATE_DEFENSE | Damage to player multipiler | 1.000000 | Float |
PLAYER_STOMACH_DECREASE_RATE | Player hunger depletion rate | 1.000000 | Float |
PLAYER_STAMINA_DECREASE_RATE | Player stamina reduction rate | 1.000000 | Float |
PLAYER_AUTO_HP_REGEN_RATE | Player auto HP regeneration rate | 1.000000 | Float |
PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP | Player sleep HP regeneration rate | 1.000000 | Float |
PAL_STOMACH_DECREASE_RATE | Pal hunger depletion rate | 1.000000 | Float |
PAL_STAMINA_DECREASE_RATE | Pal stamina reduction rate | 1.000000 | Float |
PAL_AUTO_HP_REGEN_RATE | Pal auto HP regeneration rate | 1.000000 | Float |
PAL_AUTO_HP_REGEN_RATE_IN_SLEEP | Pal sleep health regeneration rate (in Palbox) | 1.000000 | Float |
BUILD_OBJECT_DAMAGE_RATE | Damage to structure multipiler | 1.000000 | Float |
BUILD_OBJECT_DETERIORATION_DAMAGE_RATE | Structure determination rate | 1.000000 | Float |
COLLECTION_DROP_RATE | Getherable items multipiler | 1.000000 | Float |
COLLECTION_OBJECT_HP_RATE | Getherable objects HP multipiler | 1.000000 | Float |
COLLECTION_OBJECT_RESPAWN_SPEED_RATE | Getherable objects respawn interval - The smaller the number, the faster the regeneration | 1.000000 | Float |
ENEMY_DROP_ITEM_RATE | Dropped Items Multipiler | 1.000000 | Float |
DEATH_PENALTY | Death Penalty None: No death penalty Item: Drops items other than equipment ItemAndEquipment: Drops all items All: Drops all PALs and all items. |
All | None ,Item ,ItemAndEquipment ,All |
ENABLE_PLAYER_TO_PLAYER_DAMAGE | Allows players to cause damage to players | False | Boolean |
ENABLE_FRIENDLY_FIRE | Allow friendly fire | False | Boolean |
ENABLE_INVADER_ENEMY | Enable invaders | True | Boolean |
ACTIVE_UNKO | Enable UNKO (?) | False | Boolean |
ENABLE_AIM_ASSIST_PAD | Enable controller aim assist | True | Boolean |
ENABLE_AIM_ASSIST_KEYBOARD | Enable Keyboard aim assist | False | Boolean |
DROP_ITEM_MAX_NUM | Maximum number of drops in the world | 3000 | Integer |
DROP_ITEM_MAX_NUM_UNKO | Maximum number of UNKO drops in the world | 100 | Integer |
BASE_CAMP_MAX_NUM | Maximum number of base camps | 128 | Integer |
BASE_CAMP_WORKER_MAX_NUM | Maximum number of workers | 15 | Integer |
DROP_ITEM_ALIVE_MAX_HOURS | Time it takes for items to despawn in hours | 1.000000 | Float |
AUTO_RESET_GUILD_NO_ONLINE_PLAYERS | Automatically reset guild when no players are online | False | Bool |
AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS | Time to automatically reset guild when no players are online | 72.000000 | Float |
GUILD_PLAYER_MAX_NUM | Max player of Guild | 20 | Integer |
PAL_EGG_DEFAULT_HATCHING_TIME | Time(h) to incubate massive egg | 72.000000 | Float |
WORK_SPEED_RATE | Work speed muliplier | 1.000000 | Float |
IS_MULTIPLAY | Enable multiplayer | False | Boolean |
IS_PVP | Enable PVP | False | Boolean |
CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP | Allow players from other guilds to pick up death penalty items | False | Boolean |
ENABLE_NON_LOGIN_PENALTY | Enable non-login penalty | True | Boolean |
ENABLE_FAST_TRAVEL | Enable fast travel | True | Boolean |
IS_START_LOCATION_SELECT_BY_MAP | Enable selecting of start location | True | Boolean |
EXIST_PLAYER_AFTER_LOGOUT | Toggle for deleting players when they log off | False | Boolean |
ENABLE_DEFENSE_OTHER_GUILD_PLAYER | Allows defense against other guild players | False | Boolean |
COOP_PLAYER_MAX_NUM | Maximum number of players in a guild | 4 | Integer |
REGION | Region | String | |
USEAUTH | Use authentication | True | Boolean |
BAN_LIST_URL | Which ban list to use | https://api.palworldgame.com/api/banlist.txt | string |
SHOW_PLAYER_LIST | Enable show player list | True | Boolean |
When the server starts, a PalWorldSettings.ini
file will be created in the following location: saves/Config/LinuxServer/PalWorldSettings.ini
Please keep in mind that the ENV variables will always overwrite the changes made to PalWorldSettings.ini
.
Important
Changes can only be made to PalWorldSettings.ini
while the server is off.
Any changes made while the server is live will be overwritten when the server stops.
For a more detailed list of server settings go to: Palworld Wiki
For more detailed server settings explanations go to: shockbyte
Issues/Feature requests can be submitted by using this link.