Thijsvanloef Palworld Server Docker: Variables Explained
Map the Thijsvanloef Palworld Docker variables, understand the generated INI and automation, and keep admin ports and secrets private.
You will need
- Docker Engine with the Compose plugin on a supported Linux host
- Shell access to the Compose folder and its mounted palworld directory
- Access to the Compose environment values and a separate copy of the world before changing settings
The Thijsvanloef Palworld Docker image reads its own environment variables and can regenerate PalWorldSettings.ini at startup. If you have already chosen this community image, the important choice is whether to keep that generated-settings flow or manage the INI yourself. This reference explains the Compose mount, setting mappings, scheduled jobs, version controls and admin secrets without mixing them with Pocketpair’s separate official Docker image walkthrough. If you are placing a server on a NAS or hypervisor, also check the Unraid, Proxmox, and TrueNAS platform guide for host-path and backup considerations.
Separate the image tag from the Palworld server version#
latest selects the newest container image published under that tag; it does not, by itself, describe which Palworld game build is installed inside the container. The repository also publishes versioned image tags such as vX.Y.Z, plus -wine variants. In the image’s current configuration, UPDATE_ON_BOOT=true checks for a Palworld server update when the container starts, while TARGET_MANIFEST_ID can pin a game build. Those are separate controls from Docker selecting a different image.
| Change | What it updates | Where to check |
|---|---|---|
docker compose pull |
The container image selected by image: |
Registry pull output and the resolved image tag |
docker compose up -d after a pull |
Recreates the service when Compose detects a changed image or configuration | docker compose ps and container start time |
UPDATE_ON_BOOT=true |
The Palworld dedicated-server files on container start | Startup logs and the installed game version |
TARGET_MANIFEST_ID |
The requested game manifest when the image performs its update | The upstream README and startup logs |
UPDATE_ON_BOOT is enabled by default in the current .env.example, but release 2.7.3 removed the need to enable it just to make the first boot. Scheduled auto-updates are a separate, disabled-by-default job, covered below. Read the image’s version and update notes before pinning a tag or manifest; the two version numbers do different jobs.
Read the ports and persistent mount in Compose#
The service is named palworld, stores its data under the host-side ./palworld directory, and has a 30-second graceful-stop window in the upstream sample. A shortened version of that Compose file looks like this:
services:
palworld:
image: thijsvanloef/palworld-server-docker:latest
restart: unless-stopped
stop_grace_period: 30s
ports:
- "8211:8211/udp"
volumes:
- ./palworld:/palworld/The volume is the part that keeps server files outside a disposable container. The host folder ./palworld maps to /palworld/ inside the container. That includes the world under /palworld/Pal/Saved/SaveGames/, the Linux server configuration and the image’s backup directory. Confirm that the host folder contains the files you care about before replacing or moving the service.
UDP 8211 is Palworld’s default game port. The image sample also lists 27015/udp, with a Compose comment saying it is required if you want the server listed in the Community tab. That query/listing port is not a universal requirement for a direct IP connection. The exact port mapping depends on the image’s QUERY_PORT, COMMUNITY and public-port settings, so follow the upstream Compose comments if you change them. For the separate Pocketpair image and its path layout, use the official-image guide.
Choose generated settings or direct INI edits#
By default, DISABLE_GENERATE_SETTINGS=false: the image compiles its environment values into /palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini during startup. On the host, that file is below ./palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini, because of the volume mapping above. If the file is absent after the first startup, inspect the logs; the startup script can briefly run the server to create its initial files.
| Environment value | PalWorldSettings.ini key | What it controls |
|---|---|---|
PLAYERS |
ServerPlayerMaxNum |
The server’s configured player limit; image default 16, allowed values 1–32 |
PAL_SPAWN_NUM_RATE |
PalSpawnNumRate |
Pal spawn multiplier |
IS_PVP |
bIsPvP |
PvP mode flag |
SERVER_NAME |
ServerName |
Name shown for the world |
CROSSPLAY_PLATFORMS |
CrossplayPlatforms |
Platform families the server accepts |
The image translates many environment names to game keys by uppercasing and adding underscores, and it drops a leading b for Boolean keys. Use the exact spelling from the current environment example and settings compiler; do not guess a variable from an INI key.
If you prefer to edit the INI yourself, set DISABLE_GENERATE_SETTINGS=true in the container environment, restart the service, then edit the mounted file. In this mode the image does not apply its environment values to that file. Do not leave generation enabled while expecting a hand edit to survive the next startup. For the game’s current key meanings and official file paths, see the PalWorldSettings.ini reference.
Match PUID and PGID to the host account#
PUID and PGID tell the image which numeric Linux user and group IDs to use for its steam account and the files it writes under /palworld. Both default to 1000. If your Linux user has different IDs, check them in the account that owns the Compose folder:
id -u
id -gSet PUID and PGID to those results, then recreate the service. Check a new config file’s owner on the host with ls -ln ./palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini. Matching numbers let the same host account edit the file without a permissions workaround. If the files are owned by a different UID/GID, the container may start but your user may be unable to change the INI or backups.
Avoid adding a Compose user: override on top of these variables. The image’s startup initialization changes its steam account and ownership using PUID/PGID; overriding the container user bypasses that setup, so the variables no longer do what their names suggest. Keep one ownership method and verify it on the mounted host directory.
Decide which backups and scheduled jobs to enable#
The current environment example enables BACKUP_ENABLED=true and schedules an archive at 0 0 * * *, meaning midnight in the configured TZ time zone (UTC by default). The archive is stored below /palworld/backups/, which maps to ./palworld/backups/ on the host. DELETE_OLD_BACKUPS=false by default, and OLD_BACKUP_DAYS=30 is the age threshold if you enable cleanup. So the default is daily local archives without automatic deletion, not an off-site backup service.
The backup script requests a Palworld save through the REST API when that API is enabled, then archives Saved/. If the API is off, do not assume the archive includes a fresh in-game save. The image source documents how it creates an archive; we did not run a restore test here. Copy an archive to separate storage and verify your own recovery process before trusting it with a world you cannot replace.
Scheduled updates and automatic reboots both default to off. To schedule updates, AUTO_UPDATE_ENABLED=true uses AUTO_UPDATE_CRON_EXPRESSION (hourly by default), warns AUTO_UPDATE_WARN_MINUTES (30 minutes by default), and requires the REST API plus UPDATE_ON_BOOT=true. The script makes a backup before it shuts the server down for an update. An image pull is still separate: the scheduled game update does not pull a new Docker image. For a method-by-method safety sequence beyond this image’s controls, see the Palworld update guide.
AUTO_REBOOT_ENABLED=true installs the scheduled restart only when the REST API is enabled. Its default schedule is midnight in TZ, with a five-minute warning. By default, AUTO_REBOOT_EVEN_IF_PLAYERS_ONLINE=false makes the job check player count and skip the reboot while anyone is connected. Set it to true only if you intend to let that scheduled restart proceed with players online. Check the current update, backup and reboot scripts before changing their schedules.
Keep RCON, REST and Discord credentials private#
The upstream README’s prose says RCON is enabled by default, but the current .env.example and settings compiler use RCON_ENABLED=false. Because those sources disagree, explicitly set RCON_ENABLED=true if you need RCON; do not rely on an assumed default. The game’s RCON endpoint uses TCP 25575, and its REST API uses TCP 8212. The sample Compose does not publish those admin ports. Keep it that way unless you have a deliberate private-network plan; do not forward the admin ports to the public internet.
The repository documents rest-cli and rcon-cli through docker exec, so administration can stay inside the container instead of adding public port mappings. The credentials matter just as much as the ports: ADMIN_PASSWORD grants server administration, and DISCORD_WEBHOOK_URL grants access to post into the configured Discord channel. Store them outside source control and limit access to the Compose folder. The sample warns that LOG_LEVEL=DEBUG can log command arguments, including secrets, so do not leave debug logging enabled when sharing logs.
Check the config and logs before relying on it#
Validate the resolved Compose configuration before starting or changing the service. From the folder containing the Compose file, run:
docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 palworldA successful config --quiet checks the Compose file, ps reports container state and mapped ports, and logs shows the service startup output. These checks can tell you whether the container is up and which ports Compose published; they do not prove a player outside the host can connect. Check the host-side INI and ./palworld/backups/ yourself, then test your actual connection and recovery path separately.
If you want the general route comparison first, use the Palworld dedicated-server options guide. This page only explains Thijs’ image and the settings in its current repository; Docker Compose syntax and environment variables for Pocketpair’s official image belong to the official setup guide.
Quick answers
How do I change settings in thijsvanloef/palworld-server-docker?
By default, the image generates PalWorldSettings.ini from its environment values at startup. Set DISABLE_GENERATE_SETTINGS=true to manage that file directly; then the environment values are not applied.
Does the palworld-server-docker image back up automatically?
BACKUP_ENABLED defaults to true, with a daily archive under the mounted /palworld/backups directory. That documents an archive job, not a tested restore or an off-site copy.
How do I update the palworld-server-docker container?
Pull the image selected in Compose and recreate the service. The container image tag and the Palworld server build are separate; UPDATE_ON_BOOT and TARGET_MANIFEST_ID control the game build.
Is RCON enabled by default in this image?
The current README prose conflicts with its environment example and settings script. Set RCON_ENABLED=true explicitly if you need it, and keep TCP port 25575 private.

