Compare commits

..

1 Commits

Author SHA1 Message Date
Geoff Bourne
90ee1a2e3e Correctly map legacy whitelist vars APPEND_WHITELIST and OVERRIDE_WHITELIST 2024-04-29 15:53:08 -05:00
134 changed files with 382 additions and 675 deletions

View File

@@ -11,7 +11,6 @@ on:
- "docs/**"
- "examples/**"
- "notes/**"
- "kustomize/**"
jobs:
build:
@@ -22,10 +21,11 @@ jobs:
variant:
- java21-graalvm
- java21
- java21-jdk
- java21-alpine
- java17
- java17-graalvm
- java17-jdk
- java17-openj9
- java17-alpine
- java8
- java8-graalvm-ce
@@ -43,13 +43,9 @@ jobs:
baseImage: eclipse-temurin:21-jre
platforms: linux/amd64,linux/arm64
mcVersion: latest
- variant: java21-jdk
baseImage: eclipse-temurin:21
platforms: linux/amd64,linux/arm64
mcVersion: latest
- variant: java21-alpine
baseImage: eclipse-temurin:21-jre-alpine
platforms: linux/amd64,linux/arm64
platforms: linux/amd64
mcVersion: latest
# JAVA 17:
- variant: java17
@@ -61,6 +57,14 @@ jobs:
baseImage: container-registry.oracle.com/graalvm/jdk:17-ol8
platforms: linux/amd64,linux/arm64
mcVersion: 1.20.4
- variant: java17-jdk
baseImage: eclipse-temurin:17-focal
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.20.4
- variant: java17-openj9
baseImage: ibm-semeru-runtimes:open-17-jre
platforms: linux/amd64,linux/arm64
mcVersion: 1.20.4
- variant: java17-alpine
baseImage: eclipse-temurin:17-jre-alpine
platforms: linux/amd64
@@ -98,7 +102,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.1.4
with:
# for build-files step
fetch-depth: 0
@@ -133,13 +137,13 @@ jobs:
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3.4.0
uses: docker/setup-buildx-action@v3.3.0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.1.0
uses: docker/setup-qemu-action@v3.0.0
- name: Build for test
uses: docker/build-push-action@v6.4.1
uses: docker/build-push-action@v5.3.0
with:
platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }}
@@ -162,14 +166,14 @@ jobs:
tests/test.sh
- name: Login to DockerHub
uses: docker/login-action@v3.2.0
uses: docker/login-action@v3.1.0
if: env.HAS_IMAGE_REPO_ACCESS
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GHCR
uses: docker/login-action@v3.2.0
uses: docker/login-action@v3.1.0
if: env.HAS_IMAGE_REPO_ACCESS
with:
registry: ghcr.io
@@ -177,7 +181,7 @@ jobs:
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v6.4.1
uses: docker/build-push-action@v5.3.0
if: github.actor == github.repository_owner
with:
platforms: ${{ matrix.platforms }}

View File

@@ -8,7 +8,6 @@ on:
- "docs/**"
- "examples/**"
- "notes/**"
- "kustomize/**"
- "docker-compose*.yml"
- "mkdocs.yml"
@@ -30,7 +29,7 @@ jobs:
mcVersion: latest
- variant: java21-alpine
baseImage: eclipse-temurin:21-jre-alpine
platforms: linux/amd64,linux/arm64
platforms: linux/amd64
mcVersion: latest
# JAVA 17:
- variant: java17
@@ -47,16 +46,16 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.1.4
with:
# for build-files step
fetch-depth: 0
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3.4.0
uses: docker/setup-buildx-action@v3.3.0
- name: Confirm multi-arch build
uses: docker/build-push-action@v6.4.1
uses: docker/build-push-action@v5.3.0
with:
platforms: ${{ matrix.platforms }}
# ensure latest base image is used
@@ -66,7 +65,7 @@ jobs:
cache-from: type=gha,scope=${{ matrix.variant }}
- name: Build for test
uses: docker/build-push-action@v6.4.1
uses: docker/build-push-action@v5.3.0
with:
# Only build single platform since loading multi-arch image into daemon fails with
# "docker exporter does not currently support exporting manifest lists"

View File

@@ -1,4 +1,5 @@
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
version: 2
build:

View File

@@ -9,12 +9,14 @@ ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG FORCE_INSTALL_PACKAGES=1
# CI system should set this to a hash or git revision of the build directory and it's contents to
# ensure consistent cache updates.
ARG BUILD_FILES_REV=1
RUN --mount=target=/build,source=build \
TARGET=${TARGETARCH}${TARGETVARIANT} /build/run.sh install-packages
REV=${BUILD_FILES_REV} TARGET=${TARGETARCH}${TARGETVARIANT} /build/run.sh install-packages
RUN --mount=target=/build,source=build \
/build/run.sh setup-user
REV=${BUILD_FILES_REV} /build/run.sh setup-user
COPY --chmod=644 files/sudoers* /etc/sudoers.d
@@ -23,31 +25,31 @@ EXPOSE 25565
ARG APPS_REV=1
ARG GITHUB_BASEURL=https://github.com
ARG EASY_ADD_VERSION=0.8.7
ARG EASY_ADD_VERSION=0.8.4
ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
RUN chmod +x /usr/bin/easy-add
ARG RESTIFY_VERSION=1.7.4
ARG RESTIFY_VERSION=1.7.2
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG RCON_CLI_VERSION=1.6.7
ARG RCON_CLI_VERSION=1.6.4
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_MONITOR_VERSION=0.12.13
ARG MC_MONITOR_VERSION=0.12.11
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_SERVER_RUNNER_VERSION=1.12.2
ARG MC_SERVER_RUNNER_VERSION=1.12.1
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_HELPER_VERSION=1.39.9
ARG MC_HELPER_VERSION=1.38.14
ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
# used for cache busting local copy of mc-image-helper
ARG MC_HELPER_REV=1

View File

@@ -13,6 +13,6 @@ elif isTrue "${ENABLE_AUTOPAUSE}" && [[ "$( ps -ax -o stat,comm | grep 'java' |
echo "Java process suspended by Autopause function"
exit 0
else
mc-monitor status "${MC_HEALTH_EXTRA_ARGS[@]}" --host "${SERVER_HOST:-localhost}" --port "${SERVER_PORT:-25565}"
mc-monitor status "${MC_HEALTH_EXTRA_ARGS[@]}" --host localhost --port "${SERVER_PORT:-25565}"
exit $?
fi

View File

@@ -44,7 +44,7 @@ do
if [[ "$RCON_CMDS_STARTUP" ]]; then
while read -r cmd; do
run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_STARTUP")"
done <<< "$RCON_CMDS_STARTUP"
fi
if
[[ -z "$RCON_CMDS_ON_CONNECT" ]] &&
@@ -66,7 +66,7 @@ do
logRcon "First Clients has Connected, running first connect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_FIRST_CONNECT")"
done <<< "$RCON_CMDS_FIRST_CONNECT"
fi
# When a client joins
@@ -74,13 +74,13 @@ do
logRcon "Clients have Connected, running connect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_ON_CONNECT")"
done <<< "$RCON_CMDS_ON_CONNECT"
# When a client leaves
elif (( CURR_CLIENTCONNECTIONS < CLIENTCONNECTIONS )) && [[ "$RCON_CMDS_ON_DISCONNECT" ]]; then
logRcon "Clients have Disconnected, running disconnect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_ON_DISCONNECT")"
done <<< "$RCON_CMDS_ON_DISCONNECT"
fi
# Last client connection
@@ -89,7 +89,7 @@ do
logRcon "ALL Clients have Disconnected, running last disconnect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$(echo -e "$RCON_CMDS_LAST_DISCONNECT")"
done <<< "$RCON_CMDS_LAST_DISCONNECT"
fi
CLIENTCONNECTIONS=$CURR_CLIENTCONNECTIONS
;;

View File

@@ -3,7 +3,6 @@
set -e
set -o pipefail
# Install necessary packages
apk add --no-cache -U \
openssl \
imagemagick \
@@ -15,9 +14,9 @@ apk add --no-cache -U \
procps \
shadow \
bash \
curl \
iputils \
curl iputils \
git \
git-lfs \
jq \
mysql-client \
tzdata \
@@ -31,15 +30,11 @@ apk add --no-cache -U \
libwebp \
libcap
# Download and install patched knockd
# Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-alpine-amd64.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd
# Set Git credentials globally
cat <<EOF >> /etc/gitconfig
[user]
name = Minecraft Server on Docker
email = server@example.com
EOF
# Set git credentials
echo -e "[user]\n name = Minecraft Server on Docker\n email = server@example.com" >> /etc/gitconfig

View File

@@ -1,22 +1,12 @@
#!/bin/bash
set -euo pipefail
GOSU_VERSION="1.16"
GOSU_BASE_URL="https://github.com/tianon/gosu/releases/download/$GOSU_VERSION"
case $(uname -m) in
"aarch64")
GOSU_ARCH="gosu-arm64"
;;
"x86_64")
GOSU_ARCH="gosu-amd64"
;;
*)
echo "Architecture not supported!"
exit 1
;;
esac
curl -sL -o /bin/gosu "${GOSU_BASE_URL}/${GOSU_ARCH}"
chmod +x /bin/gosu
if [[ $(uname -m) == "aarch64" ]]; then
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-arm64
chmod +x /bin/gosu
elif [[ $(uname -m) == "x86_64" ]]; then
curl -sL -o /bin/gosu https://github.com/tianon/gosu/releases/download/1.16/gosu-amd64
chmod +x /bin/gosu
else
echo "Not supported!"
exit 1
fi

View File

@@ -4,33 +4,28 @@ export TARGET
set -euo pipefail
# Install and configure dnf
microdnf install dnf -y
dnf install 'dnf-command(config-manager)' -y
dnf config-manager --set-enabled ol8_codeready_builder
# Add EPEL repository
tee /etc/yum.repos.d/ol8-epel.repo <<EOF
tee /etc/yum.repos.d/ol8-epel.repo<<EOF
[ol8_developer_EPEL]
name=Oracle Linux \$releasever EPEL (\$basearch)
name= Oracle Linux \$releasever EPEL (\$basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/developer/EPEL/\$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
EOF
# Update system
dnf update -y
# Install necessary packages
dnf install -y \
ImageMagick \
dnf install -y ImageMagick \
file \
sudo \
net-tools \
iputils \
curl \
git \
git-lfs \
jq \
dos2unix \
mysql \
@@ -46,26 +41,13 @@ dnf install -y \
findutils \
which
# Install Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
dnf update -y
dnf install -y git-lfs
# Clean up DNF when done
dnf clean all
# Install gosu (assuming the script /build/ol/install-gosu.sh exists and is executable)
bash /build/ol/install-gosu.sh
# Download and install patched knockd
# Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd
# Set git credentials globally
cat <<EOF >> /etc/gitconfig
[user]
name = Minecraft Server on Docker
email = server@example.com
EOF
# Set git credentials
echo -e "[user]\n name = Minecraft Server on Docker\n email = server@example.com" >> /etc/gitconfig

View File

@@ -4,8 +4,8 @@ export TARGET
set -euo pipefail
# Update and install packages
apt-get update
DEBIAN_FRONTEND=noninteractive \
apt-get install -y \
imagemagick \
@@ -16,6 +16,7 @@ apt-get install -y \
iputils-ping \
curl \
git \
git-lfs \
jq \
dos2unix \
mysql-client \
@@ -26,26 +27,17 @@ apt-get install -y \
zstd \
lbzip2 \
nfs-common \
libpcap0.8
libpcap0.8 \
webp
# Install Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
apt-get update
apt-get install -y git-lfs
# Clean up APT when done
apt-get clean
# Download and install patched knockd
# Patched knockd
curl -fsSL -o /tmp/knock.tar.gz https://github.com/Metalcape/knock/releases/download/0.8.1/knock-0.8.1-$TARGET.tar.gz
tar -xf /tmp/knock.tar.gz -C /usr/local/ && rm /tmp/knock.tar.gz
ln -s /usr/local/sbin/knockd /usr/sbin/knockd
setcap cap_net_raw=ep /usr/local/sbin/knockd
find /usr/lib -name 'libpcap.so.0.8' -execdir cp '{}' libpcap.so.1 \;
# Set git credentials globally
cat <<EOF >> /etc/gitconfig
[user]
name = Minecraft Server on Docker
email = server@example.com
EOF
# Set git credentials
echo -e "[user]\n name = Minecraft Server on Docker\n email = server@example.com" >> /etc/gitconfig

View File

@@ -2,9 +2,5 @@
set -e
if id ubuntu > /dev/null 2>&1; then
deluser ubuntu
fi
addgroup --gid 1000 minecraft
adduser --system --shell /bin/false --uid 1000 --ingroup minecraft --home /data minecraft

View File

@@ -4,6 +4,8 @@
#
# and then access http://localhost:8000
version: "3.8"
services:
mkdocs:
build:

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -66,6 +66,7 @@ database:
This is how your `docker-compose.yml` file could look like:
```yml
version: "3.8"
# Other docker-compose examples in /examples
services:

View File

@@ -55,14 +55,6 @@ To allow time for players to finish what they're doing during a graceful server
The grace period can be increased using [the -t option on docker-compose down](https://docs.docker.com/compose/reference/down/) or set the [stop_grace_period](https://docs.docker.com/compose/compose-file/05-services/#stop_grace_period) in the compose file.
## Configuration Options for Minecraft Server Health Monitoring
The image tags include specific variables to simplify configuration for monitoring the health of a Minecraft server:
- `-e SERVER_HOST=localhost` : This variable sets the host address of the Minecraft server to be monitored. By default, it is set to `localhost`, but you can replace it with the actual hostname or IP address of your Minecraft server.
- `-e SERVER_PORT=25565` : This variable sets the port number on which the Minecraft server is running. By default, Minecraft servers run on port 25565, but if your server is configured to use a different port, you should replace `25565` with the correct port number. This helps the monitoring system to accurately check the health status of the Minecraft server on the specified port.
## OpenJ9 Specific Options
The openj9 image tags include specific variables to simplify configuration:

View File

@@ -4,9 +4,7 @@ If you prefer to manually manage the `server.properties` file, set `OVERRIDE_SER
!!! note
To clear a server property, set the variable to an empty string, such as `-e RESOURCE_PACK=""`. An unset variable is ignored and the existing server property is left unchanged.
To see what `server.properties` will get used by the server, set the environment variable `DUMP_SERVER_PROPERTIES` to "true" and the contents of `server.properties` will get output before the server starts.
To clear a server property, set the variable to an empty string, such as `-e RESOURCE_PACK=""`. An unset variable is ignored and the existing `server.property` is left unchanged.
## Placeholders
@@ -64,25 +62,9 @@ The section symbol (§) and other unicode characters are automatically converted
![](../img/motd-example.png)
To produce a multi-line MOTD, embed a newline character as `\n` in the string, such as the following example.
To produce a multi-line MOTD, embed a newline character as `\n` in the string, such as
!!! example "Multi-line MOTD"
With `docker run`
```
-e MOTD="Line one\nLine two"
```
or within a compose file
```yaml
MOTD: |
line one
line two
# or
# MOTD: "line one\nline two"
```
!!! tip

View File

@@ -31,6 +31,7 @@ When attached in this way you can stop the server, edit the configuration under
With Docker Compose, setting up a host attached directory is even easier since relative paths can be configured. For example, with the following `docker-compose.yml` Docker will automatically create/attach the relative directory `minecraft-data` to the container.
``` yaml title="docker-compose.yml"
version: "3"
services:
mc:

View File

@@ -39,6 +39,7 @@ By default, the container will download the latest version of the "vanilla" [Min
4. Done! Point your client at your host's name/IP address and port 25565.
```yaml
version: "3.8"
services:
mc:

View File

@@ -45,9 +45,7 @@ The following environment variables define the behaviour of auto-pausing:
## Rootless Auto-Pause
If you're running the container as rootless, then it is necessary to add the `CAP_NET_RAW` capability to the container, such as using [the `cap_add` service field](https://docs.docker.com/compose/compose-file/05-services/#cap_add) in a compose file or [`--cap-add` docker run argument](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities). It may also be necessary to set the environment variable `SKIP_SUDO` to "true".
You might need to set change the default port forwarder from RootlessKit to slirp4netns.
If you're running the container as rootless, you might need to set change the default port forwarder from RootlessKit to slirp4netns.
For Docker, see the following for setup:
@@ -56,9 +54,8 @@ For Docker, see the following for setup:
For Podman, see the following for setup:
- https://rootlesscontaine.rs/getting-started/podman/#changing-the-port-forwarder
- Run with
!!! example "Using docker run"
-e AUTOPAUSE_KNOCK_INTERFACE=tap0 --cap-add=CAP_NET_RAW --network slirp4netns:port_handler=slirp4netns
```
-e AUTOPAUSE_KNOCK_INTERFACE=tap0 --cap-add=CAP_NET_RAW --network slirp4netns:port_handler=slirp4netns
```

View File

@@ -2,7 +2,7 @@
An option to stop the server after a specified time has been added for niche applications (e.g. billing saving on AWS Fargate). The function is incompatible with the Autopause functionality, as they basically cancel out each other.
!!! note
!!! note
the docker container variables have to be set accordingly (restart policy set to "no") and that the container has to be manually restarted.
@@ -25,6 +25,3 @@ The following environment variables define the behavior of auto-stopping:
describes period of the daemonized state machine, that handles the stopping of the server
> To troubleshoot, add `DEBUG_AUTOSTOP=true` to see additional output
## Proxy Support
If you make use of PROXY Protocol, i.e. through something like HAProxy or Fly.io, you will need to enable it in your variety of server's configuration, and then set the `USES_PROXY_PROTOCOL` envar to `true`. This lets Autostop monitor the server, where it otherwise wouldn't

View File

@@ -7,6 +7,7 @@ Various examples are [maintained in the repository](https://github.com/itzg/dock
Using the [GeyserMC plugin](https://geysermc.org/) with a Paper server (or similar) "enables clients from Minecraft Bedrock Edition to join your Minecraft Java server". The example also includes [Floodgate](https://wiki.geysermc.org/floodgate/) which "allows Xbox Live authenticated Bedrock users to join without a Java Edition account".
```yaml
version: "3.8"
services:
mc:
@@ -32,6 +33,7 @@ Monitors network traffic to the Minecraft containers. If there is traffic, the c
By using [Lazytainer](https://github.com/vmorganp/Lazytainer) with the [docker-minecraft-server](https://github.com/itzg/docker-minecraft-server) a somehow similar behaviour to [Lazymc](https://github.com/timvisee/lazymc) can be archived.
```yaml
version: "3"
services:
lazytainer:
image: ghcr.io/vmorganp/lazytainer:master

View File

@@ -6,7 +6,7 @@ Docker image that runs a Minecraft Bedrock server.
Lightweight multiplexer/proxy for Minecraft Java servers. Provided as a stand-alone application and a Docker image.
### [itzg/mc-proxy](https://github.com/itzg/docker-bungeecord/)
### [itzg/bungeecord](https://github.com/itzg/docker-bungeecord/)
Docker image that runs a proxy powered by Bungeecord, Velocity, or Waterfall

View File

@@ -47,7 +47,3 @@ naturalist
aquaculture
naturalist
```
## Dependencies
The files processing can detect if a dependency is missing from the given list, but is not able to resolve the dependencies otherwise since their metadata only gives the mod ID and not the specific file version/ID that is needed.

View File

@@ -76,7 +76,7 @@ would expand to `https://cdn.example.org/configs-v9.0.1.zip,https://cdn.example.
If applying large generic packs, the update can be time-consuming. To skip the update set `SKIP_GENERIC_PACK_UPDATE_CHECK` to "true". Conversely, the generic pack(s) can be forced to be applied by setting `FORCE_GENERIC_PACK_UPDATE` to "true".
The most time-consuming portion of the generic pack update is generating and comparing the SHA1 checksum. To skip the checksum generation, set `SKIP_GENERIC_PACK_CHECKSUM` to "true".
The most time-consuming portion of the generic pack update is generating and comparing the SHA1 checksum. To skip the checksum generation, set `SKIP_GENERIC_PACK_CHECKSUM` to "true.
## Mods/plugins list
@@ -117,7 +117,7 @@ https://edge.forgecdn.net/files/2871/647/ToastControl-1.15.2-3.0.1.jar
Blank lines and lines that start with a `#` will be ignored
[This compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/mods-file/docker-compose.yml) shows another example of using this feature.
[This compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-mods-file.yml) shows another example of using this feature.
## Remove old mods/plugins

View File

@@ -26,5 +26,5 @@
: Can be set to `none` (the default), `required`, or `optional` to download required and/or optional dependencies.
`MODRINTH_ALLOWED_VERSION_TYPE`
: The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`. Setting to `beta` will pick up both release and beta versions. Setting to `alpha` will pick up release, beta, and alpha versions.
: The version type is used to determine the newest version to use from each project. The allowed values are `release` (default), `beta`, `alpha`.

View File

@@ -1,7 +1,7 @@
mkdocs-material == 9.5.29
mkdocs-material == 9.5.18
mkdocs-autorefs == 1.0.1
mkdocstrings == 0.25.1
mkdocstrings == 0.24.3
mkdocs-literate-nav == 0.6.1
mdx-gh-links == 0.4
mkdocs-click == 0.8.1
mkdocs-static-i18n == 1.2.3
mkdocs-static-i18n == 1.2.2

View File

@@ -73,10 +73,6 @@ To force include client mods, set `MODRINTH_FORCE_INCLUDE_FILES` to a comma or n
yet-another-config-lib
```
## Default exclude/includes
The image comes with a default set of exclude/includes, maintained [in the repo files area](https://github.com/itzg/docker-minecraft-server/blob/master/files/modrinth-exclude-include.json) and uses the same [JSON schema](https://github.com/itzg/mc-image-helper?tab=readme-ov-file#excludeinclude-file-schema) as Auto CurseForge. Those defaults can be disabled by setting the env var `MODRINTH_DEFAULT_EXCLUDE_INCLUDES` to an empty string.
## Excluding Overrides Files
Modrinth mrpack/zip files may include an `overrides` subdirectory that contains config files, world data, and extra mod files. All of those files will be extracted into the `/data` path of the container. If any of those files, such as incompatible mods, need to be excluded from extraction, then the `MODRINTH_OVERRIDES_EXCLUSIONS` variable can be set with a comma or newline delimited list of ant-style paths ([see below](#ant-style-paths)) to exclude, relative to the overrides (or `/data`) directory.

View File

@@ -1,28 +1,10 @@
A [PaperMC server](https://papermc.io/) can be automatically downloaded, upgraded, and run by setting the environment variable TYPE to "PAPER".
Enable Paper server mode by adding a `-e TYPE=PAPER` to your command-line.
By default, the container will find and download the latest build for the `VERSION` chosen. If `VERSION` is not specified, then the latest Minecraft version released by PaperMC is selected. Along with a specific `VERSION`, a specific Paper build can be selected by setting the environment variable `PAPER_BUILD`.
By default, the container will run the latest build of [Paper server](https://papermc.io/downloads) but you can also choose to run a specific build with `-e PAPERBUILD=205`.
To allow for the selection of experimental builds, set `PAPER_CHANNEL` to "experimental", otherwise only release/default channel builds are selected.
!!! example
```
docker run ... -e TYPE=PAPER ...
docker run ... -e TYPE=PAPER -e VERSION=1.20.6 ...
docker run ... -e TYPE=PAPER -e VERSION=1.20.6 -e PAPER_BUILD=140 ...
docker run ... -e TYPE=PAPER -e PAPER_CHANNEL=experimental ...
```
!!! tip
If you see the following error, it likely means you need to set the env var `PAPER_CHANNEL` to "experimental"
```
No build found for version 1.21 with channel 'default'
```
docker run -d -v /path/on/host:/data \
-e TYPE=PAPER \
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
If you are hosting your own copy of Paper you can override the download URL with `PAPER_DOWNLOAD_URL=<url>`.

View File

@@ -558,7 +558,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
</tr>
<tr>
<td><code>BROADCAST_RCON_TO_OPS</code></td>
<td>Sets broadcast-rcon-to-ops server property</td>
<td>Should RCON be enabled</td>
<td><code>false</code></td>
<td>⬜️</td>
</tr>

View File

@@ -10,32 +10,31 @@ or explicitly include the tag, such as
where `<tag>` refers to the first column of this table:
| Tag | Java version | Linux | JVM Type | Architecture |
|------------------|--------------|--------|--------------------|---------------------|
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 |
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 |
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 |
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 |
| java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 |
| java21-graalvm | 21 | Oracle | Oracle GraalVM[^1] | amd64, arm64 |
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 |
| java17-graalvm | 17 | Oracle | Oracle GraalVM[^1] | amd64, arm64 |
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) |
| java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 |
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 |
| java8-alpine | 8 | Alpine | Hotspot | amd64 (1) |
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
| Tag | Java version | Linux | JVM Type | Architecture |
|------------------|--------------|--------|--------------------|-------------------|
| latest | 21 | Ubuntu | Hotspot | amd64,arm64 |
| stable | 21 | Ubuntu | Hotspot | amd64,arm64 |
| java21 | 21 | Ubuntu | Hotspot | amd64,arm64 |
| java21-alpine | 21 | Alpine | Hotspot | amd64 |
| java21-graalvm | 21 | Oracle | Oracle GraalVM[^1] | amd64,arm64 |
| java17 | 17 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java17-jdk | 17 | Ubuntu | Hotspot+JDK | amd64,arm64,armv7 |
| java17-openj9 | 17 | Debian | OpenJ9 | amd64 |
| java17-graalvm | 17 | Oracle | Oracle GraalVM[^1] | amd64,arm64 |
| java17-alpine | 17 | Alpine | Hotspot | amd64 |
| java11 | 11 | Ubuntu | Hotspot | amd64,arm64,armv7 |
| java8 | 8 | Ubuntu | Hotspot | amd64 |
| java8-alpine | 8 | Alpine | Hotspot | amd64 |
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 |
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 |
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
1. Why no arm64 for Java 17 Alpine? That is because the base images, such as [elipse-temurin](https://hub.docker.com/_/eclipse-temurin/tags?page=&page_size=&ordering=&name=17-jre-alpine) do not provide support for that. Use the Ubuntu based images instead.
!!! example "Example using java8"
!!! example "Example using java8-multiarch"
With docker run command-line
```
docker run -it -e EULA=true itzg/minecraft-server:java8
docker run -it -e EULA=true itzg/minecraft-server:java8-multiarch
```
or in a compose file
@@ -43,7 +42,7 @@ where `<tag>` refers to the first column of this table:
```yaml
services:
mc:
image: itzg/minecraft-server:java8
image: itzg/minecraft-server:java8-multiarch
```
!!! note "Latest"
@@ -80,18 +79,6 @@ The `stable` image tag combines the benefits of `latest` and [release versions](
[This section in the Minecraft wiki](https://minecraft.wiki/w/Tutorials/Update_Java#Why_update?) lists out versions of **vanilla** Minecraft versions and the corresponding Java version that is required.
### Class file version 65.0
If encountering a startup failure similar to the following examples, then ensure that the latest image has been re-pulled to use a Java 21. Alternatively, set the image tag specifically to `itzg/minecraft-server:java21`.
> Exception in thread "ServerMain" java.lang.UnsupportedClassVersionError: org/bukkit/craftbukkit/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
or
> Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0
### Forge versions
Forge and its mods sometimes utilize non-public APIs of the JVM and as such are suspceptible to becoming broken with newer Java versions.
@@ -130,7 +117,6 @@ The following image tags have been deprecated and are no longer receiving update
- multiarch-latest
- java16/java16-openj9
- java17-graalvm-ce
- java17-openj9
- java20-graalvm, java20, java20-alpine
- java8-multiarch is still built and pushed, but please move to java8 instead

View File

@@ -16,6 +16,21 @@ services:
- "25565:25565"
volumes:
- mc-data:/data
- ./downloads:/downloads
# Manually download the following and put into the 'downloads' directory next to this compose file
#
# Mod Filename Download page
# =========================== ========================================= ====================================================================================
# Fish of Thieves [Fabric 1.20.1] Fish of Thieves v3.0.3 https://www.curseforge.com/minecraft/mc-mods/fish-of-thieves/files/4958329
# Only Hammers [FORGE/FABRIC] OnlyHammers-1.20.1-0.6-Fabric https://www.curseforge.com/minecraft/mc-mods/only-hammers-forge-fabric/files/4832068
# Sprinklerz sprinklerz-0.5_fabric.jar https://www.curseforge.com/minecraft/mc-mods/sprinklerz/files/4835664
# Frog Legs (Fabric/Forge) FrogLegs-v2.0.0-1.20.1-Fabric.jar https://www.curseforge.com/minecraft/mc-mods/froglegs/files/4917818
# TrimsEffects [FABRIC] TrimsEffects - MC 1.20.X - 1.1.0 https://www.curseforge.com/minecraft/mc-mods/trimseffects/files/4954156
# Display Case Display Case-fabric-1.20-1.0.8.jar https://www.curseforge.com/minecraft/mc-mods/displaycase/files/4921333
# Structory: Towers Structory Towers 1.20.4 v1.0.6 https://www.curseforge.com/minecraft/mc-mods/structory-towers/files/4937875
# Packet Fixer Packet Fixer Fabric 1.2.1 https://www.curseforge.com/minecraft/mc-mods/packet-fixer/files/4884316
# Perfect Plushies Perfect Plushies 1.9.0 [Fabric] https://www.curseforge.com/minecraft/mc-mods/perfect-plushies/files/4985767
# Structory Structory 1.20.2 v1.3.4 https://www.curseforge.com/minecraft/mc-mods/structory/files/4937872
volumes:
mc-data: {}

View File

@@ -1,6 +1,8 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server:java17
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
@@ -9,10 +11,11 @@ services:
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8
# CF_FILENAME_MATCHER: "1.1.0"
CF_FILENAME_MATCHER: "1.0.6"
MEMORY: 4G
volumes:
- mc-data:/data
- ../downloads:/downloads
# Since Docker's default volume driver creates volumes owned by root, this
# init container will change ownership to match final UID of mc service, above
init-filebrowser:

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server
@@ -14,6 +16,7 @@ services:
MEMORY: 4G
volumes:
- mc-data:/data
- ./downloads:/downloads
volumes:
mc-data: {}

View File

@@ -1,6 +1,8 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server:java8
image: itzg/minecraft-server:java8-multiarch
ports:
- "25565:25565"
environment:
@@ -43,6 +45,7 @@ services:
MEMORY: 4G
volumes:
- mc-data:/data
- ./downloads:/downloads
volumes:
mc-data: {}

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server
@@ -7,10 +9,11 @@ services:
# Set CF_API_KEY=... in a .env file next to this compose file and don't source control that file
CF_API_KEY: ${CF_API_KEY}
CF_SLUG: better-mc-fabric-bmc1
# CF_FILENAME_MATCHER: v18.5
CF_FILENAME_MATCHER: v18.5
MEMORY: 4G
volumes:
- mc:/data
- ../downloads:/downloads
ports:
- "25565:25565"

View File

@@ -1,18 +1,28 @@
services:
mc:
image: itzg/minecraft-server:java17
image: itzg/minecraft-server
environment:
DEBUG: true
SETUP_ONLY: true
EULA: true
TYPE: MODRINTH
VERSION: 1.20.1
MEMORY: 4G
MODRINTH_MODPACK: better-mc-forge-bmc4
MODRINTH_VERSION: v28
MODRINTH_VERSION: v4
MODRINTH_FORCE_SYNCHRONIZE: true
MODRINTH_EXCLUDE_FILES: |
citresewn
oculus
yungsmenutweaks
notenoughanimations
ryoamiclights
euphoriapatcher
entity_model_features
entity_texture_features
3dskinlayers
MODRINTH_OVERRIDES_EXCLUSIONS: |
mods/NekosEnchantedBooks-*.jar
mods/citresewn-*.jar
DEBUG: true
SETUP_ONLY: true
volumes:
- data:/data
ports:

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
minecraft:
image: itzg/minecraft-server
@@ -8,6 +10,7 @@ services:
environment:
EULA: "TRUE"
ENABLE_AUTOPAUSE: "TRUE"
OVERRIDE_SERVER_PROPERTIES: "TRUE"
MAX_TICK_TIME: "-1"
# More aggressive settings for demo purposes
AUTOPAUSE_TIMEOUT_INIT: "30"

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
minecraft:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
minecraft:
ports:

View File

@@ -1,3 +1,5 @@
version: '3.8'
####################################################################
# CURSEFORGE #
# #

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
mc:
image: itzg/minecraft-server:${IMAGE_TAG:-java8}

View File

@@ -1,3 +1,5 @@
version: "3"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: '3.8'
####################################################################
# FORGE_GENERIC_PACK #
# #

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
# FTBA support is only available in non-Alpine images

View File

@@ -1,3 +1,5 @@
version: '3.8'
####################################################################
# FORGE GENERIC_PACK #
# #

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
mc:
image: itzg/minecraft-server:${IMAGE_TAG:-latest}

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server:java8

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,8 +1,10 @@
version: '3.8'
services:
minecraft:
image: itzg/minecraft-server
volumes:
- ./data:/data
- data:/data
- ./mods:/mods
ports:
- "25565:25565"
@@ -10,5 +12,10 @@ services:
EULA: "true"
TYPE: "FORGE"
VERSION: "1.19.2"
tty: true
stdin_open: true
DEBUG: "true"
SETUP_ONLY: "true"
tty: True
stdin_open: True
volumes:
data: {}

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,4 @@
version: '3.8'
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
mc:
# build: .

View File

@@ -1,3 +1,5 @@
version: '3'
services:
minecraft:
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
mc:
image: itzg/minecraft-server:java8

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,8 +1,11 @@
# NOTE
# This file is purposely named spiget with an "e" since it provides an example of the
# This file is named spiget with an "e"
# since it provides an example of the
# feature https://docker-minecraft-server.readthedocs.io/en/latest/mods-and-plugins/spiget/
# which uses the Spiget API at https://spiget.org/
version: "3"
services:
mc:
image: itzg/minecraft-server
@@ -12,6 +15,8 @@ services:
EULA: "TRUE"
TYPE: PAPER
SPIGET_RESOURCES: 34315,3836
REMOVE_OLD_MODS: true
volumes:
- ./data:/data
- data:/data
volumes:
data: {}

View File

@@ -1,3 +1,4 @@
version: '3.8'
# Forge with Sponge API support. THIS REQUIRES DOWNLOADING SPONGEFORGE.
# Place the SpongeForge jar file in /data/mods. Other Forge mods go here as well.
# Place Sponge mods in /data/mods/plugins. Yes, this is a directory inside the Forge mod directory. Do NOT use /data/plugins.

View File

@@ -1,3 +1,4 @@
version: "3"
services:
tailscale-client:
image: tailscale/tailscale:latest

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,4 @@
version: "3"
services:
lazytainer:
image: ghcr.io/vmorganp/lazytainer:master

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: "3"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mariadb:
image: mariadb:10

View File

@@ -1,6 +1,8 @@
version: "3.8"
services:
proxy:
image: itzg/mc-proxy
image: itzg/bungeecord
environment:
TYPE: WATERFALL
ports:
@@ -10,7 +12,7 @@ services:
- ./waterfall-config:/config
# If you want to use Velocity here is a premade version that supports Velocity
# velocity-proxy:
# image: itzg/mc-proxy
# image: itzg/bungeecord
# environment:
# TYPE: VELOCITY
# ports:

View File

@@ -1,12 +0,0 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
MOTD: |
line one
line two
# or
# MOTD: "line one\nline two"
ports:
- "25565:25565"

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: '3.7'
services:
mc:
build: .

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server:java8-multiarch

View File

@@ -1,18 +0,0 @@
services:
mc:
image: itzg/minecraft-server
ports:
- "25565:25565"
environment:
EULA: "true"
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/prominence-2-rpg
CF_FILENAME_MATCHER: "2.8.7"
MEMORY: 4G
volumes:
- mc-data:/data
volumes:
mc-data: {}

View File

@@ -1,3 +1,5 @@
version: "3"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,33 +0,0 @@
# This runs the most recent version of Roguelike Adventures and Dungeons 2. Version 1.11 as of writing.
services:
mc:
image: itzg/minecraft-server:java8
ports:
- "25565:25565"
environment:
EULA: "true"
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/roguelike-adventures-and-dungeons-2
# Optional: select a specific version/file
#CF_FILENAME_MATCHER: "0.2.34"
CF_EXCLUDE_MODS: |
controlling
craftpresence
creative-core
default-options
equipment-compare
item-borders
itemphysic-lite
konkrete
oauth
sound-filters
toast-control
CF_FORCE_SYNCHRONIZE: "true"
MEMORY: 4G
volumes:
- mc-data:/data
volumes:
mc-data: {}

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server:java8-multiarch

View File

@@ -1,3 +1,5 @@
version: '3.8'
services:
mc:
image: itzg/minecraft-server:java8-multiarch

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server

View File

@@ -1,3 +1,5 @@
version: "3.3"
services:
vanillatweaks_file:
restart: "no"

View File

@@ -1,3 +1,5 @@
version: "3.8"
services:
mc:
image: itzg/minecraft-server
@@ -16,6 +18,10 @@ services:
ENABLE_COMMAND_BLOCK: true
DIFFICULTY: hard
volumes:
# Need to place non-distributable mods in ./downloads/mods
# As of Update-10.0.0
# - Neon Craft 2 v2.2: https://www.curseforge.com/minecraft/mc-mods/neon-craft-2-mod/files/3726051
- ./downloads:/downloads
- mc-data:/data
volumes:

View File

@@ -1,7 +1,5 @@
#!/bin/bash
# shellcheck source=../scripts/start-utils
. "${SCRIPTS:-/}start-utils"
current_uptime() {
awk '{print $1}' /proc/uptime | cut -d . -f 1
}
@@ -18,20 +16,14 @@ rcon_client_exists() {
[[ -n "$(ps -ax -o comm | grep 'rcon-cli')" ]]
}
use_proxy() {
if isTrue "$USES_PROXY_PROTOCOL"; then
echo "--use-proxy"
fi
}
mc_server_listening() {
mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --timeout 10s >&/dev/null
mc-monitor status --host localhost --port "$SERVER_PORT" --timeout 10s >& /dev/null
}
java_clients_connections() {
local connections
if java_running; then
if ! connections=$(mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --show-player-count); then
if java_running ; then
if ! connections=$(mc-monitor status --host localhost --port "$SERVER_PORT" --show-player-count); then
# consider it a non-zero player count if the ping fails
# otherwise a laggy server with players connected could get paused
connections=1

View File

@@ -1,66 +1,29 @@
{
"globalExcludes": [
"ambientsounds",
"auudio-forge",
"ambience-music-mod",
"appleskin",
"armor-chroma",
"armor-toughness-bar",
"beehivetooltips",
"better-advancements",
"betterf3",
"betterfps",
"better-foliage",
"better-placement",
"better-sprinting",
"better-tips-nbt-tag",
"better-third-person",
"biomeinfo",
"block-drops-jei-addon",
"blur-forge",
"cherished-worlds",
"chunk-animator",
"clickable-advancements",
"configured",
"controlling",
"ctm",
"custom-main-menu",
"defensive-measures",
"ding",
"drippy-loading-screen",
"dynamiclights-reforged",
"dynamic-surroundings",
"easiervillagertrading",
"effective-forge",
"embeddium",
"embeddium-extension",
"embeddium-extras",
"enchantment-descriptions",
"entity-collision-fps-fix",
"entity-texture-features-fabric",
"entityculling",
"extreme-sound-muffler",
"ezzoom",
"fading-night-vision",
"falling-leaves-forge",
"fancymenu",
"faster-ladder-climbing",
"foamfix-optimization-mod",
"free-cam",
"ftb-backups-2",
"fullscreen-windowed-borderless-for-minecraft",
"hwyla",
"ignitioncoil",
"inmisaddon",
"irisshaders",
"iris-flywheel-compat",
"itemphysic-lite",
"item-obliterator",
"itemzoom",
"just-enough-harvestcraft",
"just-enough-resources-jer",
"legendary-tooltips",
"lootbeams",
"loot-capacitor-tooltips",
"magnesium-extras",
"menumobs",
@@ -70,7 +33,6 @@
"neat",
"nekos-enchanted-books",
"no-recipe-book",
"no-nv-flash",
"not-enough-animations",
"oculus",
"oldjavawarning",
@@ -80,30 +42,13 @@
"resource-reloader",
"rubidium",
"rubidium-extra",
"ryoamiclights",
"schematica",
"searchables",
"shulkerboxviewer",
"skin-layers-3d",
"smart-hud",
"smooth-font",
"smoothwater",
"sodium",
"sound-filters",
"sound-physics-remastered",
"stellar-sky",
"swingthroughgrass",
"textrues-embeddium-options",
"textrues-rubidium-options",
"thaumic-jei",
"tips",
"torohealth-damage-indicators",
"true-darkness",
"ungrab-mouse-mod",
"vanillafix",
"visuality",
"waila-harvestability",
"zume"
"waila-harvestability"
],
"modpacks": {
"all-of-fabric-6": {

View File

@@ -1,79 +0,0 @@
{
"globalExcludes": [
"3dskinlayers",
"ae2-emi-crafting",
"AmbientSounds",
"amecs",
"Animation_Overhaul",
"appleskin",
"auudio",
"axolotlbuckets",
"BadOptimizations",
"BetterAdvancements",
"betterbeds",
"BetterThirdPerson",
"BHMenu",
"blur",
"Boat-Item-View",
"bobby",
"cat_jam",
"chat_heads",
"chatanimation",
"cherishedworlds",
"citresewn",
"clickadv",
"connector",
"DisableCustomWorldsAdvice",
"drippyloadingscreen",
"eating-animation",
"emiffect",
"emitrades",
"entity_model_features",
"entity_texture_features",
"entityculling",
"euphoriapatcher",
"fallingleaves",
"fancymenu",
"fast-ip-ping",
"FauxCustomEntityData",
"GeckoLibIrisCompat",
"gpumemleakfix",
"Highlighter",
"ImmediatelyFast",
"indium",
"iris",
"iris-flywheel",
"ItemBorders",
"ItemLocks",
"language-reload",
"lazy-language-loader",
"LegendaryTooltips",
"loadmyresources",
"lootbeams",
"MindfulDarkness",
"MouseTweaks",
"nicer-skies",
"notenoughanimations",
"oculus",
"OverflowingBars",
"PickUpNotifier",
"PresenceFootsteps",
"Prism",
"reeses_sodium_options",
"ResourcePackOverrides",
"ryoamiclights",
"Searchables",
"seasonhud",
"ShoulderSurfing",
"skinlayers3d",
"sodium",
"sorted_enchantments",
"visuality",
"VR-Combat",
"YeetusExperimentus",
"yungsmenutweaks",
"Zoomify"
],
"globalForceIncludes": [],
"modpacks": {}
}

View File

@@ -13,24 +13,10 @@ configMapGenerator:
- name: mc
envs:
- mc.env
patches:
# Example of using a patch to set external service name for mc-router to pick up
- path: set-external-servername.yml
```
### mc.env
```
EULA=true
TYPE=FORGE
```
###
```yaml
apiVersion: v1
kind: Service
metadata:
name: mc
annotations:
mc-router.itzg.me/externalServerName: forge.example.com
```

View File

@@ -15,27 +15,6 @@ theme:
- navigation.top
- navigation.indexes
locale: en
palette:
# Palette toggle for automatic mode
- media: "(prefers-color-scheme)"
toggle:
icon: material/brightness-auto
name: Switch to light mode
# Palette toggle for light mode
- media: "(prefers-color-scheme: light)"
scheme: default
toggle:
icon: material/brightness-7
name: Switch to dark mode
# Palette toggle for dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
toggle:
icon: material/brightness-4
name: Switch to system preference
highlightjs: true
hljs_languages:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -57,9 +57,6 @@ fi
# Setup RCON password
if isTrue "${ENABLE_RCON:-true}"; then
# turn off debug output
set +x
if [[ -v RCON_PASSWORD_FILE ]]; then
if [ ! -e "${RCON_PASSWORD_FILE}" ]; then
log ""
@@ -81,12 +78,11 @@ if isTrue "${ENABLE_RCON:-true}"; then
# For rcon-cli access running via exec, which by default is running as root
echo "password=${RCON_PASSWORD}" > "$HOME/.rcon-cli.env"
echo "password: \"${RCON_PASSWORD}\"" > "$HOME/.rcon-cli.yaml"
isDebugging && set -x
else
rm -f "$HOME/.rcon-cli.env" "$HOME/.rcon-cli.yaml"
fi
##########################################
# Auto-pause/stop

View File

@@ -12,7 +12,7 @@ set -eu
: "${CF_FORCE_SYNCHRONIZE:=false}"
: "${CF_FORCE_REINSTALL_MODLOADER:=false}"
: "${CF_IGNORE_MISSING_FILES:=}"
: "${CF_EXCLUDE_INCLUDE_FILE=/image/cf-exclude-include.json}"
: "${CF_EXCLUDE_INCLUDE_FILE=https://raw.githubusercontent.com/itzg/docker-minecraft-server/master/files/cf-exclude-include.json}"
: "${CF_EXCLUDE_MODS:=}"
: "${CF_FORCE_INCLUDE_MODS:=}"
: "${CF_SET_LEVEL_FROM:=}" # --set-level-from

View File

@@ -9,11 +9,10 @@ resultsFile=/data/.install-modrinth.env
: "${MODRINTH_MODPACK:=${MODRINTH_PROJECT:-}}"
: "${MODRINTH_LOADER:=}"
: "${MODRINTH_VERSION:=${MODRINTH_VERSION_ID:-}}"
: "${MODRINTH_IGNORE_MISSING_FILES=}"
: "${MODRINTH_EXCLUDE_FILES=}"
: "${MODRINTH_FORCE_INCLUDE_FILES=}"
: "${MODRINTH_OVERRIDES_EXCLUSIONS=}"
: "${MODRINTH_DEFAULT_EXCLUDE_INCLUDES=/image/modrinth-exclude-include.json}"
: "${MODRINTH_IGNORE_MISSING_FILES:=}"
: "${MODRINTH_EXCLUDE_FILES:=}"
: "${MODRINTH_FORCE_INCLUDE_FILES:=}"
: "${MODRINTH_OVERRIDES_EXCLUSIONS:=}"
if [[ ! $MODRINTH_MODPACK ]]; then
log "ERROR: MODRINTH_MODPACK must be set when using TYPE/MOD_PLATFORM of MODRINTH"
@@ -61,7 +60,6 @@ setArg --default-version-type MODRINTH_DEFAULT_VERSION_TYPE
setArg --exclude-files MODRINTH_EXCLUDE_FILES
setArg --force-include-files MODRINTH_FORCE_INCLUDE_FILES
setArg --overrides-exclusions MODRINTH_OVERRIDES_EXCLUSIONS
setArg --default-exclude-includes MODRINTH_DEFAULT_EXCLUDE_INCLUDES
if ! mc-image-helper install-modrinth-modpack "${args[@]}"; then
log "ERROR failed to install Modrinth modpack"

View File

@@ -6,11 +6,9 @@ set -o pipefail
handleDebugMode
: "${PAPER_PROJECT:=paper}"
: "${PAPER_BUILD:=${PAPERBUILD:-}}"
: "${PAPER_CHANNEL:=default}"
: "${PAPERBUILD:=}"
: "${PAPER_DOWNLOAD_URL:=}"
: "${PAPER_CUSTOM_JAR:=}"
: "${PAPER_CONFIG_DEFAULTS_REPO:=https://raw.githubusercontent.com/dayyeeet/minecraft-default-configs/main}"
resultsFile=/data/.paper.env
if [[ $PAPER_CUSTOM_JAR ]]; then
@@ -35,10 +33,9 @@ else
--results-file="$resultsFile"
--project="$PAPER_PROJECT"
--version="$VERSION"
--channel="$PAPER_CHANNEL"
)
if [[ $PAPER_BUILD ]]; then
args+=(--build="$PAPER_BUILD")
if [[ $PAPERBUILD ]]; then
args+=(--build="$PAPERBUILD")
fi
if ! mc-image-helper install-paper "${args[@]}"; then
log "ERROR: failed to download $PAPER_PROJECT"
@@ -52,12 +49,6 @@ else
fi
# Download default configs to allow for consistent patching
for c in paper-global.yml paper-world-defaults.yml spigot.yml; do
DOWNLOAD_DEFAULT_CONFIGS+=",${PAPER_CONFIG_DEFAULTS_REPO}/${VERSION}/$c"
done
export DOWNLOAD_DEFAULT_CONFIGS
# Normalize on Spigot for downstream operations
export FAMILY=SPIGOT

View File

@@ -64,9 +64,6 @@ patchLog4jConfig() {
canUseRollingLogs=false
}
# Temporarily disable debugging output
oldState=$(shopt -po xtrace || true)
shopt -u -o xtrace
# Patch Log4j remote code execution vulnerability
# See https://www.minecraft.net/en-us/article/important-message--security-vulnerability-java-edition
if versionLessThan 1.7; then
@@ -83,7 +80,6 @@ elif isType PURPUR && versionLessThan 1.18.1; then
elif versionLessThan 1.18.1; then
useFallbackJvmFlag=true
fi
eval "$oldState"
if ${useFallbackJvmFlag}; then
JVM_OPTS="-Dlog4j2.formatMsgNoLookups=true ${JVM_OPTS}"
@@ -231,12 +227,6 @@ MC_HEALTH_EXTRA_ARGS=(
--use-server-list-ping
)
" > /data/.mc-health.env
elif isTrue "$USES_PROXY_PROTOCOL"; then
echo "
MC_HEALTH_EXTRA_ARGS=(
--use-proxy
)
" > /data/.mc-health.env
else
rm -f /data/.mc-health.env
fi
@@ -295,11 +285,6 @@ EOF
if isTrue "${EXEC_DIRECTLY:-false}"; then
"${finalArgs[@]}"
else
if [ -f "${FTB_DIR}/variables.txt" ]; then
JVM_ARGS="${JVM_XX_OPTS} ${JVM_OPTS} $expandedDOpts"
JVM_ARGS=${JVM_ARGS//$'\n'/}
sed -i "s~JAVA_ARGS=.*~JAVA_ARGS=\"${JVM_ARGS}\"~" "${FTB_DIR}/variables.txt"
fi
exec mc-server-runner "${mcServerRunnerArgs[@]}" "${finalArgs[@]}"
fi
elif [[ $SERVER =~ run.sh ]]; then

View File

@@ -4,7 +4,6 @@
. "${SCRIPTS:-/}start-utils"
set -e
handleDebugMode
: "${REPLACE_ENV_IN_PLACE:=${REPLACE_ENV_VARIABLES:-false}}"
: "${REPLACE_ENV_PATHS:=/data}"
@@ -14,7 +13,6 @@ handleDebugMode
: "${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS:=}"
: "${PATCH_DEFINITIONS:=}"
: "${DEBUG:=false}"
: "${DOWNLOAD_DEFAULT_CONFIGS:=}"
if isTrue "${REPLACE_ENV_IN_PLACE}"; then
log "Replacing env variables in ${REPLACE_ENV_PATHS} that match the prefix '$REPLACE_ENV_VARIABLE_PREFIX' ..."
@@ -27,16 +25,6 @@ if isTrue "${REPLACE_ENV_IN_PLACE}"; then
"${REPLACE_ENV_PATHS[@]}"
fi
if [[ $DOWNLOAD_DEFAULT_CONFIGS ]]; then
log "Downloading default configs, if needed"
if ! mc-image-helper mcopy \
--to /data/config \
--skip-existing --skip-up-to-date=false \
"$DOWNLOAD_DEFAULT_CONFIGS" 2> /dev/null; then
log "WARN: one or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
fi
fi
if [[ ${PATCH_DEFINITIONS} ]]; then
log "Applying patch definitions from ${PATCH_DEFINITIONS}"
mc-image-helper patch \

View File

@@ -77,13 +77,20 @@ if [[ -v WHITELIST_FILE ]]; then
fi
if [[ -v WHITELIST ]]; then
args=()
if isTrue "${APPEND_WHITELIST:-false}" || isFalse "${OVERRIDE_WHITELIST:-true}"; then
args+=(--append-only)
fi
existing="$EXISTING_WHITELIST_FILE"
# Working with an OPS list, so normalize the value to a "non-file" mode
if [[ "$EXISTING_WHITELIST_FILE" = SYNC_FILE_MERGE_LIST ]]; then
existing=MERGE
fi
# legacy option
if [[ -v APPEND_WHITELIST ]] && isTrue "${APPEND_WHITELIST}"; then
existing=MERGE
fi
# legacy option
if [[ -v OVERRIDE_WHITELIST ]] && isFalse "${OVERRIDE_WHITELIST}"; then
existing=SKIP
fi
# shellcheck disable=SC2086
mc-image-helper manage-users \
"${sharedArgs[@]}" "${args[@]}" \

View File

@@ -105,6 +105,10 @@ function customizeServerProps {
esac
fi
if [[ -v LEVEL_TYPE ]]; then
LEVEL_TYPE="${LEVEL_TYPE^^}"
fi
setPropertiesArgs=(
--definitions "/image/property-definitions.json"
)

View File

@@ -5,15 +5,10 @@
set -e
isDebugging && set -x
# support absolute directories
if [[ "${LEVEL:-world}" =~ ^\/.*$ ]]; then
worldDest=${LEVEL}
if [ "$TYPE" = "CURSEFORGE" ]; then
worldDest=$FTB_DIR/${LEVEL:-world}
else
if [ "$TYPE" = "CURSEFORGE" ]; then
worldDest=$FTB_DIR/${LEVEL:-world}
else
worldDest=/data/${LEVEL:-world}
fi
worldDest=/data/${LEVEL:-world}
fi
if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] ); then

View File

@@ -8,10 +8,7 @@ handleDebugMode
: "${SPIGET_RESOURCES:=}"
: "${SPIGET_DOWNLOAD_TOLERANCE:=5}" # in minutes
: "${REMOVE_OLD_MODS:=false}"
: "${REMOVE_OLD_MODS_EXCLUDE:=}"
: "${REMOVE_OLD_MODS_INCLUDE:=*.jar,*-version.json}"
: "${REMOVE_OLD_MODS_DEPTH:=1} "
acceptArgs=(--accept application/zip --accept application/java-archive --accept application/octet-stream)
@@ -130,7 +127,7 @@ downloadResourceFromSpiget() {
}
if [[ ${SPIGET_RESOURCES} ]]; then
if isTrue "${REMOVE_OLD_MODS}"; then
if isTrue "${REMOVE_OLD_MODS:-false}"; then
removeOldMods /data/plugins
REMOVE_OLD_MODS=false
fi

View File

@@ -64,7 +64,7 @@ function getFilenameFromUrl() {
function isTrue() {
case "${1,,}" in
true | yes | on | 1)
true | on | 1)
return 0
;;
*)
@@ -75,7 +75,7 @@ function isTrue() {
function isFalse() {
case "${1,,}" in
false | no | off | 0)
false | off | 0)
return 0
;;
*)
@@ -161,121 +161,11 @@ function normalizeMemSize() {
echo $((val * scale))
}
function compare_version() {
local left_version=$1
local comparison=$2
local right_version=$3
if [[ -z "$left_version" ]]; then
echo "Left version is required"
return 1
fi
if [[ -z "$right_version" ]]; then
echo "Right version is required"
return 1
fi
# Handle version channels ('a', 'b', or numeric)
if [[ $left_version == a* || $left_version == b* ]]; then
left_version=${left_version:1}
fi
if [[ $right_version == a* || $right_version == b* ]]; then
right_version=${right_version:1}
fi
local left_version_channel=${left_version:0:1}
if [[ $left_version_channel =~ [0-9] ]]; then
left_version_channel='r'
fi
local right_version_channel=${right_version:0:1}
if [[ $right_version_channel =~ [0-9] ]]; then
right_version_channel='r'
fi
if [[ $comparison == "lt" && $left_version_channel < $right_version_channel ]]; then
return 0
elif [[ $comparison == "lt" && $left_version_channel > $right_version_channel ]]; then
return 1
elif [[ $comparison == "gt" && $left_version_channel > $right_version_channel ]]; then
return 0
elif [[ $comparison == "gt" && $left_version_channel < $right_version_channel ]]; then
return 1
elif [[ $comparison == "le" && $left_version_channel < $right_version_channel ]]; then
return 0
elif [[ $comparison == "le" && $left_version_channel == $right_version_channel ]]; then
return 0
elif [[ $comparison == "ge" && $left_version_channel > $right_version_channel ]]; then
return 0
elif [[ $comparison == "ge" && $left_version_channel == $right_version_channel ]]; then
return 0
elif [[ $comparison == "eq" && $left_version_channel == $right_version_channel ]]; then
return 0
fi
# Compare the versions using sort -V
local result
case $comparison in
"lt")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | head -n1) == "$left_version" && "$left_version" != "$right_version" ]]; then
result=0
else
result=1
fi
;;
"le")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | head -n1) == "$left_version" ]]; then
result=0
else
result=1
fi
;;
"eq")
if [[ "$left_version" == "$right_version" ]]; then
result=0
else
result=1
fi
;;
"ge")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | tail -n1) == "$left_version" ]]; then
result=0
else
result=1
fi
;;
"gt")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | tail -n1) == "$left_version" && "$left_version" != "$right_version" ]]; then
result=0
else
result=1
fi
;;
*)
echo "Unsupported comparison operator: $comparison"
return 1
;;
esac
return $result
}
function versionLessThan() {
local oldState
# The return status when listing options is zero if all optnames are enabled, non- zero otherwise.
oldState=$(shopt -po xtrace || true)
shopt -u -o xtrace
# Use if-else since strict mode might be enabled
if compare_version "${VERSION}" "lt" "${1?}"; then
eval "$oldState"
if mc-image-helper compare-versions "${VERSION}" lt "${1?}"; then
return 0
else
eval "$oldState"
return 1
fi
}
@@ -317,13 +207,13 @@ eula=${EULA,,}
function removeOldMods {
if [ -d "$1" ]; then
log "Removing old mods including='${REMOVE_OLD_MODS_INCLUDE}' excluding='${REMOVE_OLD_MODS_EXCLUDE}' up to depth=${REMOVE_OLD_MODS_DEPTH}"
log "Removing old mods including:${REMOVE_OLD_MODS_INCLUDE} excluding:${REMOVE_OLD_MODS_EXCLUDE}"
args=(
--delete
--type file
--min-depth=1 --max-depth "${REMOVE_OLD_MODS_DEPTH}"
--name "${REMOVE_OLD_MODS_INCLUDE}"
--exclude-name "${REMOVE_OLD_MODS_EXCLUDE}"
--min-depth=1 --max-depth "${REMOVE_OLD_MODS_DEPTH:-16}"
--name "${REMOVE_OLD_MODS_INCLUDE:-*}"
--exclude-name "${REMOVE_OLD_MODS_EXCLUDE:-}"
)
if ! isDebugging; then
args+=(--quiet)
@@ -436,7 +326,7 @@ function resolveVersion() {
function resolveFamily() {
case "$TYPE" in
PAPER|SPIGOT|BUKKIT|CANYON|PUFFERFISH|PURPUR)
FAMILY=SPIGOT
FAMILY=SIGOT
;;
FORGE)
FAMILY=FORGE
@@ -452,7 +342,7 @@ function ensureRemoveAllModsOff() {
reason=${1?}
if isTrue "${REMOVE_OLD_MODS:-false}"; then
log "WARNING using REMOVE_OLD_MODS interferes with $reason -- it is now disabled"
log "WARNING using REMOVE_OLDS_MODS interferes with $reason -- it is now disabled"
REMOVE_OLD_MODS=false
fi
}
}

View File

@@ -1,3 +1,5 @@
version: "3"
services:
monitor:
depends_on:

View File

@@ -1,3 +1,5 @@
version: "3"
services:
monitor:
depends_on:

Some files were not shown because too many files have changed in this diff Show More