Skip to content

Misc options

Running with a custom server JAR

If you would like to run a custom server JAR, set -e TYPE=CUSTOM and pass the custom server JAR via CUSTOM_SERVER. It can either be a URL or a container path to an existing JAR file.

If it is a URL, it will only be downloaded into the /data directory if it wasn't already. As such, if you need to upgrade or re-download the JAR, then you will need to stop the container, remove the file from the container's /data directory, and start again.

Force re-download of the server file

For VANILLA, FORGE, BUKKIT, SPIGOT, PAPER, CURSEFORGE, SPONGEVANILLA server types, set $FORCE_REDOWNLOAD to some value (e.g. 'true) to force a re-download of the server file for the particular server type. by adding a -e FORCE_REDOWNLOAD=true to your command-line.

For example, with PaperSpigot, it would look something like this:

docker run -d -v /path/on/host:/data \
    -e TYPE=PAPER -e FORCE_REDOWNLOAD=true \
    -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server

Running as alternate user/group ID

By default, the container will switch to user ID 1000 and group ID 1000; however, you can override those values by setting UID and/or GID as environmental entries, during the docker run command.

-e UID=1234
-e GID=1234

The container will also skip user switching if the --user/-u argument is passed to docker run.

Extra Arguments

Arguments that would usually be passed to the jar file (those which are written after the filename) can be passed via the EXTRA_ARGS environment variable.

See Custom worlds directory path for an example.

Interactive and Color Console

When RCON is enabled, which is the default, and TTY is enabled on the container, then some server types will output colorized logs and provide a fully interactive console. To access the interactive console, use docker attach (not exec). When finished, make sure to use the sequence Control-P, Control-Q to detach without stopping the container.

If this behavior interferes with the log content, then disable TTY or remove the setting entirely since the default is disabled. In a compose file, set the service's tty parameter to false. On the docker run command-line remove the -t argument.

Server Shutdown Options

To allow time for players to finish what they're doing during a graceful server shutdown, set STOP_SERVER_ANNOUNCE_DELAY to a number of seconds to delay after an announcement is posted by the server.

Increase stop grace period

The Docker stop grace period must be increased to a value longer than the announce delay. The value to use that is longer than announce delay will vary based upon the amount of time it takes for final world data saving. If the container exits with exit code 137, then that indicates a longer grace period is needed.

The grace period can be increased using the -t option on docker-compose down or set the stop_grace_period in the compose file.

OpenJ9 Specific Options

The openj9 image tags include specific variables to simplify configuration:

  • -e TUNE_VIRTUALIZED=TRUE : enables the option to optimize for virtualized environments
  • -e TUNE_NURSERY_SIZES=TRUE : configures nursery sizes where the initial size is 50% of the MAX_MEMORY and the max size is 80%.

Enabling rolling logs

By default the vanilla log file will grow without limit. The logger can be reconfigured to use a rolling log files strategy by using:

  -e ENABLE_ROLLING_LOGS=true

NOTE this will interfere with interactive/color consoles as described in the section above

Timezone Configuration

You can configure the timezone to match yours by setting the TZ environment variable:

    -e TZ=Europe/London

such as:

    docker run -d -it -e TZ=Europe/London -p 25565:25565 --name mc itzg/minecraft-server

Or mounting /etc/timezone as readonly (not supported on Windows):

    -v /etc/timezone:/etc/timezone:ro

such as:

    docker run -d -it -v /etc/timezone:/etc/timezone:ro -p 25565:25565 --name mc itzg/minecraft-server

HTTP Proxy

You may configure the use of an HTTP/HTTPS proxy by passing the proxy's URL via the PROXY environment variable. In the example compose file it references a companion squid proxy by setting the equivalent of

-e PROXY=proxy:3128

Using "noconsole" option

Some older versions (pre-1.14) of Spigot required --noconsole to be passed when detaching stdin, which can be done by setting -e CONSOLE=FALSE.

Explicitly disable GUI

Some older servers get confused and think that the GUI interface is enabled. You can explicitly disable that by passing -e GUI=FALSE.

Stop Duration

When the container is signalled to stop, the Minecraft process wrapper will attempt to send a "stop" command via RCON or console and waits for the process to gracefully finish. By default it waits 60 seconds, but that duration can be configured by setting the environment variable STOP_DURATION to the number of seconds.

Setup only

If you are using a host-attached data directory, then you can have the image setup the Minecraft server files and stop prior to launching the server process by setting SETUP_ONLY to true.

Enable Flare Flags

To enable the JVM flags required to fully support the Flare profiling suite, set the following variable:

-e USE_FLARE_FLAGS=true

Flare is built-in to Pufferfish/Purpur, and is available in plugin form for other server types.

Enable support for optimized SIMD operations

To enable support for optimized SIMD operations, the JVM flag can be set with the following variable:

-e USE_SIMD_FLAGS=true

SIMD optimized operations are supported by Pufferfish and Purpur.

Enable timestamps in init logs

Before the container starts the Minecraft Server its output is prefixed with [init], such as

[init] Starting the Minecraft server...

To also include the timestamp with each log, set LOG_TIMESTAMP to "true". The log output will then look like:

[init] 2022-02-05 16:58:33+00:00 Starting the Minecraft server...