mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 15:13:55 +00:00
Compare commits
68 Commits
docs/more-
...
2025.9.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
99f31d5a9b | ||
|
|
155b478ee1 | ||
|
|
6faa3a379d | ||
|
|
fc6fcb68e5 | ||
|
|
0da12d1518 | ||
|
|
a9b4e67d22 | ||
|
|
75016e948b | ||
|
|
d72db19b4e | ||
|
|
cad2bc1ef6 | ||
|
|
c29430ffc5 | ||
|
|
7c05109ffa | ||
|
|
ce0f1599de | ||
|
|
57a3fe7641 | ||
|
|
75082daa1d | ||
|
|
b1d68a65aa | ||
|
|
11414c83c1 | ||
|
|
720006b445 | ||
|
|
9d2cd1475e | ||
|
|
acfd6fadf8 | ||
|
|
ba172b2aa9 | ||
|
|
e4859fb23a | ||
|
|
eb682118ff | ||
|
|
2fbc804f3e | ||
|
|
5bd6287f52 | ||
|
|
b6a8b95159 | ||
|
|
0d834dd992 | ||
|
|
0a5ac8aba6 | ||
|
|
37d2aebb1e | ||
|
|
d5d1592c38 | ||
|
|
dedacfb94e | ||
|
|
c6e970c8d2 | ||
|
|
fa56741869 | ||
|
|
2abae7462c | ||
|
|
a569d63cf3 | ||
|
|
e305782a8f | ||
|
|
24c352949c | ||
|
|
6ee414337a | ||
|
|
c2071e5038 | ||
|
|
02640e5414 | ||
|
|
ac806b756c | ||
|
|
605e2ea993 | ||
|
|
c9dd6dc72c | ||
|
|
d8bca85d55 | ||
|
|
3acc867f58 | ||
|
|
8463893168 | ||
|
|
5b79daa4a3 | ||
|
|
1fd1e15f3c | ||
|
|
37e08466ad | ||
|
|
1868cd05da | ||
|
|
8a7cfbfb3e | ||
|
|
e31a730d21 | ||
|
|
a36a75a790 | ||
|
|
07b10027af | ||
|
|
c72e23b4d7 | ||
|
|
5036ef5f2f | ||
|
|
37e956e517 | ||
|
|
36015d2b39 | ||
|
|
a3ac903dfe | ||
|
|
6e94f4234b | ||
|
|
9d8ab63ee5 | ||
|
|
cde239f033 | ||
|
|
8bc184cd18 | ||
|
|
3cdc86ef0b | ||
|
|
45f14512bb | ||
|
|
d402403876 | ||
|
|
9ebae54e6e | ||
|
|
19a8bcfb53 | ||
|
|
c700880bbe |
29
.github/workflows/build-multiarch.yml
vendored
29
.github/workflows/build-multiarch.yml
vendored
@@ -12,6 +12,7 @@ on:
|
||||
- "examples/**"
|
||||
- "notes/**"
|
||||
- "kustomize/**"
|
||||
- "images.json"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -29,6 +30,8 @@ jobs:
|
||||
- java17
|
||||
- java17-graalvm
|
||||
- java17-alpine
|
||||
- java16
|
||||
- java11
|
||||
- java8
|
||||
- java8-graalvm-ce
|
||||
- java8-openj9
|
||||
@@ -74,31 +77,41 @@ jobs:
|
||||
baseImage: eclipse-temurin:17-jre-alpine
|
||||
platforms: linux/amd64
|
||||
mcVersion: 1.20.4
|
||||
# JAVA 16
|
||||
- variant: java16
|
||||
baseImage: adoptopenjdk:16-jre-hotspot
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.16.5
|
||||
# JAVA 11
|
||||
- variant: java11
|
||||
baseImage: adoptopenjdk:11-jre-hotspot
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.16.4
|
||||
# JAVA 8: NOTE: Unable to go past 8u312 because of Forge dependencies
|
||||
- variant: java8
|
||||
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
mcHelperVersion: 1.42.1
|
||||
# mcHelperVersion: 1.46.0
|
||||
- variant: java8-graalvm-ce
|
||||
baseImage: ghcr.io/graalvm/graalvm-ce:java8
|
||||
platforms: linux/amd64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
mcHelperVersion: 1.42.1
|
||||
# mcHelperVersion: 1.46.0
|
||||
- variant: java8-jdk
|
||||
baseImage: eclipse-temurin:8u312-b07-jdk-focal
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
mcHelperVersion: 1.42.1
|
||||
# mcHelperVersion: 1.46.0
|
||||
- variant: java8-openj9
|
||||
baseImage: ibm-semeru-runtimes:open-8u312-b07-jre
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: 1.12.2
|
||||
# Pin version for Java 8
|
||||
mcHelperVersion: 1.42.1
|
||||
# mcHelperVersion: 1.46.0
|
||||
env:
|
||||
IMAGE_TO_TEST: "${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}"
|
||||
HAS_IMAGE_REPO_ACCESS: ${{ secrets.DOCKER_USER != '' && secrets.DOCKER_PASSWORD != '' }}
|
||||
@@ -106,14 +119,14 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4.2.2
|
||||
uses: actions/checkout@v5.0.0
|
||||
with:
|
||||
# for build-files step
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5.7.0
|
||||
uses: docker/metadata-action@v5.8.0
|
||||
with:
|
||||
# NOTE for forks: if your Docker Hub organization doesn't match your Github repo's,
|
||||
# then the use of ${{ github.repository_owner }} will need to be replaced.
|
||||
@@ -173,14 +186,14 @@ jobs:
|
||||
tests/test.sh
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v3.4.0
|
||||
uses: docker/login-action@v3.5.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.4.0
|
||||
uses: docker/login-action@v3.5.0
|
||||
if: env.HAS_IMAGE_REPO_ACCESS
|
||||
with:
|
||||
registry: ghcr.io
|
||||
|
||||
3
.github/workflows/verify-pr.yml
vendored
3
.github/workflows/verify-pr.yml
vendored
@@ -11,6 +11,7 @@ on:
|
||||
- "kustomize/**"
|
||||
- "docker-compose*.yml"
|
||||
- "mkdocs.yml"
|
||||
- "images.json"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -49,7 +50,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4.2.2
|
||||
uses: actions/checkout@v5.0.0
|
||||
with:
|
||||
# for build-files step
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -43,12 +43,12 @@ 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.13.1
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.13.3
|
||||
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.45.0
|
||||
ARG MC_HELPER_VERSION=1.48.11
|
||||
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
|
||||
@@ -65,8 +65,7 @@ STOPSIGNAL SIGTERM
|
||||
ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000 LC_ALL=en_US.UTF-8
|
||||
|
||||
COPY --chmod=755 scripts/start* /
|
||||
COPY --chmod=755 bin/ /usr/local/bin/
|
||||
COPY --chmod=755 bin/mc-health /health.sh
|
||||
COPY --chmod=755 files/shims/ /usr/local/bin/
|
||||
COPY --chmod=755 files/* /image/
|
||||
COPY --chmod=755 files/auto /auto
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM python:3.9
|
||||
FROM python:3.11
|
||||
|
||||
RUN pip install --upgrade pip
|
||||
|
||||
|
||||
@@ -50,9 +50,17 @@ In order to attach and interact with the Minecraft server make sure to enable TT
|
||||
tty: true
|
||||
```
|
||||
|
||||
With that you can attach and interact at any time using
|
||||
With that you can attach and interact at any time using the following, replacing the `{...}` placeholders.
|
||||
|
||||
docker attach mc
|
||||
...when container is created with `docker run`
|
||||
```
|
||||
docker attach {container name or ID}
|
||||
```
|
||||
|
||||
...or when declared using a compose file
|
||||
```
|
||||
docker compose attach {service name}
|
||||
```
|
||||
|
||||
and then Control-p Control-q to **detach**.
|
||||
|
||||
|
||||
@@ -1,143 +1,139 @@
|
||||
# JVM Options
|
||||
|
||||
## Memory Limit
|
||||
|
||||
By default, the image declares an initial and maximum Java memory-heap limit of 1 GB. There are several ways to adjust the memory settings:
|
||||
|
||||
- `MEMORY`: "1G" by default, can be used to adjust both initial (`Xms`) and max (`Xmx`) memory heap settings of the JVM
|
||||
- `INIT_MEMORY`: independently sets the initial heap size
|
||||
- `MAX_MEMORY`: independently sets the max heap size
|
||||
|
||||
The values of all three are passed directly to the JVM and support format/units as `<size>[g|G|m|M|k|K]`.
|
||||
|
||||
!!! example "Using docker run"
|
||||
|
||||
```
|
||||
-e MEMORY=2G
|
||||
```
|
||||
|
||||
or to use init and max memory:
|
||||
|
||||
```
|
||||
-e INIT_MEMORY=1G -e MAX_MEMORY=4G
|
||||
```
|
||||
|
||||
!!! example "Using compose file"
|
||||
|
||||
```
|
||||
environment:
|
||||
MEMORY: 2G
|
||||
```
|
||||
|
||||
or to use init and max memory:
|
||||
|
||||
```
|
||||
environment:
|
||||
INIT_MEMORY: 1G
|
||||
MAX_MEMORY: 4G
|
||||
```
|
||||
|
||||
To let the JVM calculate the heap size from the container declared memory limit, unset `MEMORY` with an empty value, such as `-e MEMORY=""`. By default, the JVM will use 25% of the container memory limit as the heap limit; however, as an example the following would tell the JVM to use 75% of the container limit of 4GB of memory:
|
||||
|
||||
!!! example "MaxRAMPercentage using compose file"
|
||||
|
||||
```
|
||||
environment:
|
||||
MEMORY: ""
|
||||
JVM_XX_OPTS: "-XX:MaxRAMPercentage=75"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
```
|
||||
|
||||
!!! important
|
||||
The settings above only set the Java **heap** limits. Memory resource requests and limits on the overall container should also account for non-heap memory usage. An extra 25% is [a general best practice](https://dzone.com/articles/best-practices-java-memory-arguments-for-container).
|
||||
|
||||
## Extra JVM Options
|
||||
|
||||
General JVM options can be passed to the Minecraft Server invocation by passing a `JVM_OPTS`
|
||||
environment variable. The JVM requires `-XX` options to precede `-X` options, so those can be declared in `JVM_XX_OPTS`. Both variables are space-delimited, raw JVM arguments.
|
||||
|
||||
```
|
||||
docker run ... -e JVM_OPTS="-someJVMOption someJVMOptionValue" ...
|
||||
```
|
||||
|
||||
**NOTE** When declaring `JVM_OPTS` in a compose file's `environment` section with list syntax, **do not** include the quotes:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- EULA=true
|
||||
- JVM_OPTS=-someJVMOption someJVMOptionValue
|
||||
```
|
||||
|
||||
Using object syntax is recommended and more intuitive:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
EULA: "true"
|
||||
JVM_OPTS: "-someJVMOption someJVMOptionValue"
|
||||
# or
|
||||
# JVM_OPTS: -someJVMOption someJVMOptionValue
|
||||
```
|
||||
|
||||
As a shorthand for passing several system properties as `-D` arguments, you can instead pass a comma separated list of `name=value` or `name:value` pairs with `JVM_DD_OPTS`. (The colon syntax is provided for management platforms like Plesk that don't allow `=` inside a value.)
|
||||
|
||||
For example, instead of passing
|
||||
|
||||
```yaml
|
||||
JVM_OPTS: -Dfml.queryResult=confirm -Dname=value
|
||||
```
|
||||
|
||||
you can use
|
||||
|
||||
```yaml
|
||||
JVM_DD_OPTS: fml.queryResult=confirm,name=value
|
||||
```
|
||||
|
||||
## Enable Remote JMX for Profiling
|
||||
|
||||
To enable remote JMX, such as for profiling with VisualVM or JMC, set the environment variable `ENABLE_JMX` to "true", set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as:
|
||||
|
||||
!!! example
|
||||
|
||||
With `docker run`
|
||||
|
||||
```
|
||||
-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091
|
||||
```
|
||||
|
||||
If needing to map to a different port, then also set the environment variable `JMX_PORT` to the desired host port.
|
||||
|
||||
!!! example
|
||||
|
||||
With a compose file:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
ENABLE_JMX: true
|
||||
JMX_HOST: ${HOSTNAME}
|
||||
JMX_PORT: "7092"
|
||||
ports:
|
||||
- "7092:7092"
|
||||
```
|
||||
|
||||
## Enable Aikar's Flags
|
||||
|
||||
[Aikar has done some research](https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/) into finding the optimal JVM flags for GC tuning, which becomes more important as more users are connected concurrently. [PaperMC also has an explanation](https://docs.papermc.io/paper/aikars-flags) of what the JVM flags are doing.
|
||||
|
||||
The set of flags documented there can be added using
|
||||
|
||||
-e USE_AIKAR_FLAGS=true
|
||||
|
||||
When `MEMORY` is greater than or equal to 12G, then the Aikar flags will be adjusted according to the article.
|
||||
|
||||
## Enable MeowIce's Flags
|
||||
|
||||
[MeowIce has created an updated set of JVM flags](https://github.com/MeowIce/meowice-flags?tab=readme-ov-file#why-would-i-have-to-switch-) based on Aikar's flags but with support for optimizations for Java 17 and above
|
||||
|
||||
The set of flags documented there can be added using
|
||||
|
||||
-e USE_MEOWICE_FLAGS=true
|
||||
|
||||
There is an optional `USE_MEOWICE_GRAALVM_FLAGS` variable to enable GraalVM specific optimizations, defaults to `TRUE` if USE_MEOWICE_GRAALVM_FLAGS is `TRUE`
|
||||
# JVM Options
|
||||
|
||||
## Memory Limit
|
||||
|
||||
By default, the image declares an initial and maximum Java memory-heap limit of 1 GB. There are several ways to adjust the memory settings:
|
||||
|
||||
- `MEMORY`: "1G" by default, can be used to adjust both initial (`Xms`) and max (`Xmx`) memory heap settings of the JVM
|
||||
- `INIT_MEMORY`: independently sets the initial heap size
|
||||
- `MAX_MEMORY`: independently sets the max heap size
|
||||
|
||||
The values of all three are passed directly to the JVM and support format/units as `<size>[g|G|m|M|k|K]`.
|
||||
|
||||
!!! example "Using docker run"
|
||||
|
||||
```
|
||||
-e MEMORY=2G
|
||||
```
|
||||
|
||||
or to use init and max memory:
|
||||
|
||||
```
|
||||
-e INIT_MEMORY=1G -e MAX_MEMORY=4G
|
||||
```
|
||||
|
||||
!!! example "Using compose file"
|
||||
|
||||
```
|
||||
environment:
|
||||
MEMORY: 2G
|
||||
```
|
||||
|
||||
or to use init and max memory:
|
||||
|
||||
```
|
||||
environment:
|
||||
INIT_MEMORY: 1G
|
||||
MAX_MEMORY: 4G
|
||||
```
|
||||
|
||||
To let the JVM calculate the heap size from the container declared memory limit, unset `MEMORY` with an empty value, such as `-e MEMORY=""`. By default, the JVM will use 25% of the container memory limit as the heap limit; however, as an example the following would tell the JVM to use 75% of the container limit of 4GB of memory:
|
||||
|
||||
!!! example "MaxRAMPercentage using compose file"
|
||||
|
||||
```
|
||||
environment:
|
||||
MEMORY: ""
|
||||
JVM_XX_OPTS: "-XX:MaxRAMPercentage=75"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
```
|
||||
|
||||
!!! important
|
||||
The settings above only set the Java **heap** limits. Memory resource requests and limits on the overall container should also account for non-heap memory usage. An extra 25% is [a general best practice](https://dzone.com/articles/best-practices-java-memory-arguments-for-container).
|
||||
|
||||
## Extra JVM Options
|
||||
|
||||
General JVM options can be passed to the Minecraft Server invocation by passing a `JVM_OPTS`
|
||||
environment variable. The JVM requires `-XX` options to precede `-X` options, so those can be declared in `JVM_XX_OPTS`. Both variables are space-delimited, raw JVM arguments.
|
||||
|
||||
```
|
||||
docker run ... -e JVM_OPTS="-someJVMOption someJVMOptionValue" ...
|
||||
```
|
||||
|
||||
**NOTE** When declaring `JVM_OPTS` in a compose file's `environment` section with list syntax, **do not** include the quotes:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- EULA=true
|
||||
- JVM_OPTS=-someJVMOption someJVMOptionValue
|
||||
```
|
||||
|
||||
Using object syntax is recommended and more intuitive:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
EULA: "true"
|
||||
JVM_OPTS: "-someJVMOption someJVMOptionValue"
|
||||
# or
|
||||
# JVM_OPTS: -someJVMOption someJVMOptionValue
|
||||
```
|
||||
|
||||
As a shorthand for passing several system properties as `-D` arguments, you can instead pass a comma separated list of `name=value` or `name:value` pairs with `JVM_DD_OPTS`. (The colon syntax is provided for management platforms like Plesk that don't allow `=` inside a value.)
|
||||
|
||||
For example, instead of passing
|
||||
|
||||
```yaml
|
||||
JVM_OPTS: -Dfml.queryResult=confirm -Dname=value
|
||||
```
|
||||
|
||||
you can use
|
||||
|
||||
```yaml
|
||||
JVM_DD_OPTS: fml.queryResult=confirm,name=value
|
||||
```
|
||||
|
||||
## Enable Remote JMX for Profiling
|
||||
|
||||
To enable remote JMX, such as for profiling with VisualVM or JMC, set the environment variable `ENABLE_JMX` to "true", set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as:
|
||||
|
||||
!!! example
|
||||
|
||||
With `docker run`
|
||||
|
||||
```
|
||||
-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091
|
||||
```
|
||||
|
||||
If needing to map to a different port, then also set the environment variable `JMX_PORT` to the desired host port.
|
||||
|
||||
!!! example
|
||||
|
||||
With a compose file:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
ENABLE_JMX: true
|
||||
JMX_HOST: ${HOSTNAME}
|
||||
JMX_PORT: "7092"
|
||||
ports:
|
||||
- "7092:7092"
|
||||
```
|
||||
|
||||
## Enable Aikar's Flags
|
||||
|
||||
[Aikar has done some research](https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/) into finding the optimal JVM flags for GC tuning, which becomes more important as more users are connected concurrently. [PaperMC also has an explanation](https://docs.papermc.io/paper/aikars-flags) of what the JVM flags are doing.
|
||||
|
||||
The set of flags documented there can be added using
|
||||
|
||||
-e USE_AIKAR_FLAGS=true
|
||||
|
||||
When `MEMORY` is greater than or equal to 12G, then the Aikar flags will be adjusted according to the article.
|
||||
|
||||
## Enable MeowIce's Flags
|
||||
|
||||
[MeowIce has created an updated set of JVM flags](https://github.com/MeowIce/meowice-flags?tab=readme-ov-file#why-would-i-have-to-switch-) based on Aikar's flags but with support for optimizations for Java 17 and above
|
||||
|
||||
The set of flags documented there can be added by setting the environment variable `USE_MEOWICE_FLAGS` to `true`. There is an optional `USE_MEOWICE_GRAALVM_FLAGS` variable to enable GraalVM specific optimizations, defaults to `FALSE`.
|
||||
|
||||
@@ -107,11 +107,7 @@ such as:
|
||||
|
||||
## 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](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-proxied.yml) it references
|
||||
a companion squid proxy by setting the equivalent of
|
||||
|
||||
-e PROXY=proxy:3128
|
||||
You may configure the use of an HTTP/HTTPS proxy by passing the proxy's "host:port" via the environment variable `PROXY`. In [the example compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-proxied.yml) it references a Squid proxy. The host and port can be separately passed via the environment variables `PROXY_HOST` and `PROXY_PORT`. A `|` delimited list of hosts to exclude from proxying can be passed via `PROXY_NON_PROXY_HOSTS`.
|
||||
|
||||
## Using "noconsole" option
|
||||
|
||||
|
||||
@@ -84,9 +84,19 @@ To produce a multi-line MOTD, embed a newline character as `\n` in the string, s
|
||||
# MOTD: "line one\nline two"
|
||||
```
|
||||
|
||||
!!! tip
|
||||
The following example combines a multi-line MOTD with [placeholders](#placeholders) from the latest version of the installed modpack:
|
||||
|
||||
You can also embed configured and resolved environment variables using [placeholders](#placeholders).
|
||||
!!! example
|
||||
|
||||
```yaml
|
||||
MOD_PLATFORM: AUTO_CURSEFORGE
|
||||
CF_SLUG: craftoria
|
||||
MOTD: |
|
||||
A %TYPE% server on %VERSION%
|
||||
running %MODPACK_NAME% %MODPACK_VERSION%
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Difficulty
|
||||
|
||||
@@ -246,7 +256,7 @@ By default, the server listens for RCON on port 25575 within the container. It c
|
||||
|
||||
### Query
|
||||
|
||||
Set the environment variable `QUERY_PORT` to "true" to enable the gamespy query protocol. Map to the server property [enable-query](https://minecraft.wiki/w/Server.properties#enable-query). By default, the query port will be `25565` (UDP) but can be changed with the `QUERY_PORT` environment variable.
|
||||
Set the environment variable `ENABLE_QUERY` to "true" to enable the gamespy query protocol. Maps to the server property [enable-query](https://minecraft.wiki/w/Server.properties#enable-query). By default, the query port will be `25565` (UDP) but can be changed with the `QUERY_PORT` environment variable.
|
||||
|
||||
### Level Seed
|
||||
|
||||
@@ -302,29 +312,28 @@ Example for a superflat world:
|
||||
- Desert biome
|
||||
|
||||
```yaml
|
||||
LEVEL_TYPE: FLAT
|
||||
GENERATOR_SETTINGS: >-4
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"block": "minecraft:bedrock",
|
||||
"height": 1
|
||||
},
|
||||
{
|
||||
"block": "minecraft:stone",
|
||||
"height": 2
|
||||
},
|
||||
{
|
||||
"block": "minecraft:sandstone",
|
||||
"height": 15
|
||||
}
|
||||
],
|
||||
"biome": "minecraft:desert"
|
||||
}
|
||||
|
||||
|
||||
environment:
|
||||
LEVEL_TYPE: FLAT
|
||||
GENERATOR_SETTINGS: >-
|
||||
{
|
||||
"layers": [
|
||||
{
|
||||
"block": "minecraft:bedrock",
|
||||
"height": 1
|
||||
},
|
||||
{
|
||||
"block": "minecraft:stone",
|
||||
"height": 2
|
||||
},
|
||||
{
|
||||
"block": "minecraft:sandstone",
|
||||
"height": 15
|
||||
}
|
||||
],
|
||||
"biome": "minecraft:desert"
|
||||
}
|
||||
```
|
||||
For more details, check the [official wiki](https://minecraft.wiki/w/Java_Edition_level_format#generatorOptions_tag_format).
|
||||
For more details, refer to the Minecraft Wiki sections for [Superflat Multiplayer](https://minecraft.wiki/w/Superflat#Multiplayer) and [generator options tag format](https://minecraft.wiki/w/Java_Edition_level_format#generatorOptions_tag_format).
|
||||
|
||||
### Custom Server Resource Pack
|
||||
|
||||
@@ -387,41 +396,47 @@ When using `docker run` from a bash shell, the entries must be quoted with the `
|
||||
|
||||
### Other server property mappings
|
||||
|
||||
| Environment Variable | Server Property |
|
||||
|-----------------------------------|-----------------------------------------------------------------------------------------|
|
||||
| ALLOW_FLIGHT | [allow-flight](https://minecraft.wiki/w/Server.properties#allow-flight) |
|
||||
| ALLOW_NETHER | [allow-nether](https://minecraft.wiki/w/Server.properties#allow-nether) |
|
||||
| BROADCAST_CONSOLE_TO_OPS | broadcast-console-to-ops |
|
||||
| BROADCAST_RCON_TO_OPS | broadcast-rcon-to-ops |
|
||||
| BUG_REPORT_LINK | bug-report-link |
|
||||
| ENABLE_COMMAND_BLOCK | [enable-command-block](https://minecraft.wiki/w/Server.properties#enable-command-block) |
|
||||
| ENABLE_STATUS | enable-status |
|
||||
| ENFORCE_SECURE_PROFILE | enforce-secure-profile |
|
||||
| ENTITY_BROADCAST_RANGE_PERCENTAGE | entity-broadcast-range-percentage |
|
||||
| FORCE_GAMEMODE | [force-gamemode](https://minecraft.wiki/w/Server.properties#force-gamemode) |
|
||||
| FUNCTION_PERMISSION_LEVEL | function-permission-level |
|
||||
| GENERATE_STRUCTURES | [generate-structures](https://minecraft.wiki/w/Server.properties#generate-structures) |
|
||||
| HARDCORE | [hardcore](https://minecraft.wiki/w/Server.properties#hardcore) |
|
||||
| HIDE_ONLINE_PLAYERS | hide-online-players |
|
||||
| LOG_IPS | log-ips |
|
||||
| MAX_CHAINED_NEIGHBOR_UPDATES | max-chained-neighbor-updates |
|
||||
| MAX_PLAYERS | [max-players](https://minecraft.wiki/w/Server.properties#max-players) |
|
||||
| MAX_TICK_TIME | [max-tick-time](https://minecraft.wiki/w/Server.properties#max-tick-time) |
|
||||
| MAX_WORLD_SIZE | [max-world-size](https://minecraft.wiki/w/Server.properties#max-world-size) |
|
||||
| NETWORK_COMPRESSION_THRESHOLD | network-compression-threshold |
|
||||
| ONLINE_MODE | [online-mode](https://minecraft.wiki/w/Server.properties#online-mode) |
|
||||
| OP_PERMISSION_LEVEL | op-permission-level |
|
||||
| PAUSE_WHEN_EMPTY_SECONDS | pause-when-empty-seconds |
|
||||
| PLAYER_IDLE_TIMEOUT | player-idle-timeout |
|
||||
| PREVENT_PROXY_CONNECTIONS | prevent-proxy-connections |
|
||||
| PVP | [pvp](https://minecraft.wiki/w/Server.properties#pvp) |
|
||||
| REGION_FILE_COMPRESSION | region-file-compression |
|
||||
| RESOURCE_PACK_ID | resource-pack-id |
|
||||
| RESOURCE_PACK_PROMPT | resource-pack-prompt |
|
||||
| SERVER_NAME | [server-name](https://minecraft.wiki/w/Server.properties#server-name) |
|
||||
| SIMULATION_DISTANCE | simulation-distance |
|
||||
| SPAWN_MONSTERS | [spawn-monsters](https://minecraft.wiki/w/Server.properties#spawn-monsters) |
|
||||
| SPAWN_PROTECTION | [spawn-protection](https://minecraft.wiki/w/Server.properties#spawn-protection) |
|
||||
| SYNC_CHUNK_WRITES | sync-chunk-writes |
|
||||
| USE_NATIVE_TRANSPORT | use-native-transport |
|
||||
| VIEW_DISTANCE | [view-distance](https://minecraft.wiki/w/Server.properties#view-distance) |
|
||||
| Environment Variable | Server Property |
|
||||
|-----------------------------------|-------------------------------------------------------------------------------------------------------------------|
|
||||
| ACCEPTS_TRANSFERS | [accepts-transfers](https://minecraft.wiki/w/Server.properties#accepts-transfers) |
|
||||
| ALLOW_FLIGHT | [allow-flight](https://minecraft.wiki/w/Server.properties#allow-flight) |
|
||||
| ALLOW_NETHER | [allow-nether](https://minecraft.wiki/w/Server.properties#allow-nether) |
|
||||
| BROADCAST_CONSOLE_TO_OPS | [broadcast-console-to-ops](https://minecraft.wiki/w/Server.properties#broadcast-console-to-ops) |
|
||||
| BROADCAST_RCON_TO_OPS | [broadcast-rcon-to-ops](https://minecraft.wiki/w/Server.properties#broadcast-rcon-to-ops) |
|
||||
| BUG_REPORT_LINK | [bug-report-link](https://minecraft.wiki/w/Server.properties#bug-report-link) |
|
||||
| ENABLE_COMMAND_BLOCK | [enable-command-block](https://minecraft.wiki/w/Server.properties#enable-command-block) |
|
||||
| ENABLE_STATUS | [enable-status](https://minecraft.wiki/w/Server.properties#enable-status) |
|
||||
| ENFORCE_SECURE_PROFILE | [enforce-secure-profile](https://minecraft.wiki/w/Server.properties#enforce-secure-profile) |
|
||||
| ENTITY_BROADCAST_RANGE_PERCENTAGE | [entity-broadcast-range-percentage](https://minecraft.wiki/w/Server.properties#entity-broadcast-range-percentage) |
|
||||
| FORCE_GAMEMODE | [force-gamemode](https://minecraft.wiki/w/Server.properties#force-gamemode) |
|
||||
| FUNCTION_PERMISSION_LEVEL | [function-permission-level](https://minecraft.wiki/w/Server.properties#function-permission-level) |
|
||||
| GENERATE_STRUCTURES | [generate-structures](https://minecraft.wiki/w/Server.properties#generate-structures) |
|
||||
| HARDCORE | [hardcore](https://minecraft.wiki/w/Server.properties#hardcore) |
|
||||
| HIDE_ONLINE_PLAYERS | [hide-online-players](https://minecraft.wiki/w/Server.properties#hide-online-players) |
|
||||
| LOG_IPS | [log-ips](https://minecraft.wiki/w/Server.properties#log-ips) |
|
||||
| MANAGEMENT_SERVER_ENABLED | [management-server-enabled](https://minecraft.wiki/w/Server.properties#management-server-enabled) |
|
||||
| MANAGEMENT_SERVER_HOST | [management-server-host](https://minecraft.wiki/w/Server.properties#management-server-host) |
|
||||
| MANAGEMENT_SERVER_PORT | [management-server-port](https://minecraft.wiki/w/Server.properties#management-server-port) |
|
||||
| MAX_CHAINED_NEIGHBOR_UPDATES | [max-chained-neighbor-updates](https://minecraft.wiki/w/Server.properties#max-chained-neighbor-updates) |
|
||||
| MAX_PLAYERS | [max-players](https://minecraft.wiki/w/Server.properties#max-players) |
|
||||
| MAX_TICK_TIME | [max-tick-time](https://minecraft.wiki/w/Server.properties#max-tick-time) |
|
||||
| MAX_WORLD_SIZE | [max-world-size](https://minecraft.wiki/w/Server.properties#max-world-size) |
|
||||
| NETWORK_COMPRESSION_THRESHOLD | [network-compression-threshold](https://minecraft.wiki/w/Server.properties#network-compression-threshold) |
|
||||
| ONLINE_MODE | [online-mode](https://minecraft.wiki/w/Server.properties#online-mode) |
|
||||
| OP_PERMISSION_LEVEL | [op-permission-level](https://minecraft.wiki/w/Server.properties#op-permission-level) |
|
||||
| PAUSE_WHEN_EMPTY_SECONDS | [pause-when-empty-seconds](https://minecraft.wiki/w/Server.properties#pause-when-empty-seconds) |
|
||||
| PLAYER_IDLE_TIMEOUT | [player-idle-timeout](https://minecraft.wiki/w/Server.properties#player-idle-timeout) |
|
||||
| PREVENT_PROXY_CONNECTIONS | [prevent-proxy-connections](https://minecraft.wiki/w/Server.properties#prevent-proxy-connections) |
|
||||
| PVP | [pvp](https://minecraft.wiki/w/Server.properties#pvp) |
|
||||
| RATE_LIMIT | [rate-limit](https://minecraft.wiki/w/Server.properties#rate-limit) |
|
||||
| REGION_FILE_COMPRESSION | [region-file-compression](https://minecraft.wiki/w/Server.properties#region-file-compression) |
|
||||
| RESOURCE_PACK_ID | [resource-pack-id](https://minecraft.wiki/w/Server.properties#resource-pack-id) |
|
||||
| RESOURCE_PACK_PROMPT | [resource-pack-prompt](https://minecraft.wiki/w/Server.properties#resource-pack-prompt) |
|
||||
| SERVER_NAME | [server-name](https://minecraft.wiki/w/Server.properties#server-name) |
|
||||
| SIMULATION_DISTANCE | [simulation-distance](https://minecraft.wiki/w/Server.properties#simulation-distance) |
|
||||
| SPAWN_MONSTERS | [spawn-monsters](https://minecraft.wiki/w/Server.properties#spawn-monsters) |
|
||||
| SPAWN_PROTECTION | [spawn-protection](https://minecraft.wiki/w/Server.properties#spawn-protection) |
|
||||
| STATUS_HEARTBEAT_INTERVAL | [status-heartbeat-interval](https://minecraft.wiki/w/Server.properties#status-heartbeat-interval) |
|
||||
| SYNC_CHUNK_WRITES | [sync-chunk-writes](https://minecraft.wiki/w/Server.properties#sync-chunk-writes) |
|
||||
| USE_NATIVE_TRANSPORT | [use-native-transport](https://minecraft.wiki/w/Server.properties#use-native-transport) |
|
||||
| VIEW_DISTANCE | [view-distance](https://minecraft.wiki/w/Server.properties#view-distance) |
|
||||
BIN
docs/img/motd-with-placeholders.png
Normal file
BIN
docs/img/motd-with-placeholders.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
@@ -29,7 +29,7 @@ where, in this case, the standard server port 25565, will be exposed on your hos
|
||||
|
||||
**DO NOT** port forward RCON on 25575 without first setting `RCON_PASSWORD` to a secure value. It is highly recommended to only use RCON within the container, such as with `rcon-cli`.
|
||||
|
||||
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](versions/java.md) and the [`TYPE`](types-and-platforms/index.md) can be configured to create many variations of desired Minecraft server.
|
||||
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](versions/minecraft.md) and the [`TYPE`](types-and-platforms/index.md) can be configured to create many variations of desired Minecraft server.
|
||||
|
||||
## Using [Docker Compose](https://docs.docker.com/compose/)
|
||||
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
# Auto-Pause
|
||||
|
||||
!!! important
|
||||
|
||||
As of [1.21.2](https://minecraft.wiki/w/Java_Edition_1.21.2) it is not recommend to use this feature since Minecraft server natively auto-pauses when the server is empty. That is configured via the enivironment variable `PAUSE_WHEN_EMPTY_SECONDS`, which maps to the `pause-when-empty-seconds` server property.
|
||||
|
||||
An auto-pause functionality is provided that monitors whether clients are connected to the server. If a client is not connected for a specified time, the Java process is put into a pause state. When a client attempts to connect while the process is paused, then process will be restored to a running state. The experience for the client does not change. This feature can be enabled by setting the environment variable `ENABLE_AUTOPAUSE` to "true".
|
||||
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
|
||||
!!! tip "For advanced use only"
|
||||
|
||||
This page describes a capability that is not applicable to most users. It is only intended for rare cases when a very specific Java base image is needed or additional packages need to be installed that are not generally applicable or would bloat the image size.
|
||||
|
||||
Be sure to confirm that the desired [version and variant of Java isn't already provided](../versions/java.md).
|
||||
|
||||
## Building image locally with alternate Java base
|
||||
|
||||
The following shows how to change the base Java image used by the build:
|
||||
An alternate Java base image can be specified by setting the [docker build argument](https://docs.docker.com/reference/cli/docker/buildx/build/#build-arg) `BASE_IMAGE` to the desired base image. The following shows an example of using the base image `ghcr.io/graalvm/graalvm-ce:ol8-java11`:
|
||||
|
||||
```shell
|
||||
docker build --build-arg BASE_IMAGE=ghcr.io/graalvm/graalvm-ce:ol8-java11 -t IMG_PREFIX/minecraft-server:java11-graalvm .
|
||||
@@ -7,14 +7,14 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||
b418af073764 mc "/start" 43 seconds ago Up 41 seconds (healthy) 0.0.0.0:25565->25565/tcp, 25575/tcp mc
|
||||
```
|
||||
|
||||
You can also query the container's health in a script friendly way:
|
||||
You can also query the container's health in a script-friendly way:
|
||||
|
||||
``` shell
|
||||
> docker container inspect -f "{{.State.Health.Status}}" mc
|
||||
healthy
|
||||
```
|
||||
|
||||
There's actually a wrapper script called `mc-health` that takes care of calling `mc-monitor status` with the correct arguments. If needing to customize the health checks parameters, such as in a compose file, then use something like the following in the service declaration:
|
||||
There's actually a wrapper script called `mc-health` that takes care of calling `mc-monitor status` with the correct arguments. If needing to customize the health checks parameters, such as in a Compose file, then use something like the following in the service declaration:
|
||||
|
||||
``` yaml
|
||||
healthcheck:
|
||||
@@ -24,9 +24,16 @@ healthcheck:
|
||||
retries: 20
|
||||
```
|
||||
|
||||
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of healthchecks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
|
||||
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of health checks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
|
||||
|
||||
### Healthchecks for older versions
|
||||
The [health check in a Compose service declaration](https://docs.docker.com/reference/compose-file/services/#healthcheck) can also be disabled using:
|
||||
|
||||
This container disables Healthchecks for Versions before b1.8 as those versions do not support any kind of server pinging.
|
||||
For more information see [Server List Ping](https://wiki.vg/Server_List_Ping#Beta_1.8_to_1.3)
|
||||
```yaml
|
||||
healthcheck:
|
||||
disable: true
|
||||
test: ["NONE"]
|
||||
```
|
||||
|
||||
### Health checks for older versions
|
||||
|
||||
This container disables health checks for Minecraft versions before b1.8 as those versions do not support any kind of server pinging. For more information see [Server List Ping](https://minecraft.wiki/w/Java_Edition_protocol/Server_List_Ping#Beta_1.8_to_1.3).
|
||||
|
||||
@@ -42,6 +42,25 @@
|
||||
datapack:terralith
|
||||
```
|
||||
|
||||
## Version from Projects
|
||||
|
||||
When the environment variable `VERSION_FROM_MODRINTH_PROJECTS` is set to "true" the Minecraft [`VERSION`](../versions/minecraft.md) will be automatically determined by looking at the most recent version of Minecraft that is supported by all the projects provided in `MODRINTH_PROJECTS`.
|
||||
|
||||
!!! example
|
||||
|
||||
Given the environment variables
|
||||
|
||||
```yaml
|
||||
MODRINTH_PROJECTS: |
|
||||
viaversion
|
||||
viabackwards
|
||||
griefprevention
|
||||
discordsrv
|
||||
VERSION_FROM_MODRINTH_PROJECTS: true
|
||||
```
|
||||
|
||||
Let's say all are supported on Minecraft up to 1.21.8 except griefprevention, which is only supported up to 1.21.7. In that case, `VERSION` will be automatically set to 1.21.7.
|
||||
|
||||
## Extra options
|
||||
|
||||
`MODRINTH_DOWNLOAD_DEPENDENCIES`
|
||||
@@ -50,3 +69,6 @@
|
||||
`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.
|
||||
|
||||
`MODRINTH_LOADER`
|
||||
: When using a custom server, set this to specify which loader type will be requested during lookups
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
mkdocs-material == 9.6.14
|
||||
mkdocs-autorefs == 1.4.2
|
||||
mkdocstrings[python] == 0.29.1
|
||||
mkdocs-material == 9.6.18
|
||||
mkdocs-autorefs == 1.4.3
|
||||
mkdocstrings[python] == 0.30.0
|
||||
mkdocs-literate-nav == 0.6.2
|
||||
mdx-gh-links == 0.4
|
||||
mkdocs-click == 0.9.0
|
||||
|
||||
@@ -12,6 +12,7 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
|
||||
|
||||
Example if your key is `$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa`:
|
||||
```yaml
|
||||
# compose.yaml
|
||||
environment:
|
||||
CF_API_KEY: '$$11$$22$$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
```
|
||||
@@ -21,17 +22,35 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
|
||||
docker run ... -e CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
```
|
||||
|
||||
To avoid exposing the API key, it is highly recommended to use a `.env` file, which is [loaded automatically by docker compose](https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with-an-env-file). `$`'s in the value still need to escaped with a second `$` and the variable needs to be referenced from the compose file, such as:
|
||||
To avoid exposing the API key, it is highly recommended to use a `.env` file, which is [loaded automatically by docker compose](https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with-an-env-file). You **do not** need to escape `$`'s with a second `$` in the `.env` file **as long as the key is wrapped in single quotes**.
|
||||
|
||||
```
|
||||
# .env
|
||||
CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
```
|
||||
|
||||
The variable should to be referenced from the compose file, such as:
|
||||
|
||||
```yaml
|
||||
# compose.yaml
|
||||
environment:
|
||||
CF_API_KEY: ${CF_API_KEY}
|
||||
```
|
||||
|
||||
The .env file should be placed in the same directory as your compose file like so:
|
||||
|
||||
```
|
||||
/minecraft-server
|
||||
├── .env
|
||||
├── compose.yaml
|
||||
├── /data
|
||||
```
|
||||
|
||||
To use the equivalent with `docker run` you need to specify the `.env` file explicitly:
|
||||
```
|
||||
docker run --env-file=.env itzg/minecraft-server
|
||||
```
|
||||
|
||||
|
||||
Alternately you can use [docker secrets](https://docs.docker.com/compose/how-tos/use-secrets/) with a `CF_API_KEY_FILE` environment variable:
|
||||
```
|
||||
service:
|
||||
@@ -39,7 +58,7 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
|
||||
CF_API_KEY_FILE: /run/secrets/cf_api_key
|
||||
secrets:
|
||||
- cf_api_key
|
||||
|
||||
|
||||
secrets:
|
||||
cf_api_key:
|
||||
file: cf_api_key.secret
|
||||
|
||||
@@ -41,21 +41,27 @@ A specific loader or launcher version other than the latest can be requested usi
|
||||
FABRIC_LOADER_VERSION: 0.13.1
|
||||
```
|
||||
|
||||
!!! note "Fabric API"
|
||||
!!! note
|
||||
|
||||
As [mentioned on the Fabric download page](https://fabricmc.net/use/installer/), most mods will require the Fabric API mod to be installed. That can be easily done by utilizing [the Modrinth downloads feature](../../mods-and-plugins/modrinth.md), such as adding this to the `environment` of a compose file service:
|
||||
|
||||
```yaml
|
||||
TYPE: FABRIC
|
||||
MODRINTH_PROJECTS: |
|
||||
fabric-api
|
||||
```
|
||||
See the [Working with mods and plugins](../../mods-and-plugins/index.md) section to set up Fabric mods and configuration.
|
||||
|
||||
!!! note "Alternate launcher"
|
||||
## Fabric API
|
||||
|
||||
If you wish to use an alternative launcher you can:
|
||||
As [mentioned on the Fabric download page](https://fabricmc.net/use/installer/), most mods will require the Fabric API mod to be installed. That can be easily done by utilizing [the Modrinth downloads feature](../../mods-and-plugins/modrinth.md), such as adding this to the `environment` of a compose file service:
|
||||
|
||||
- Provide the path to a custom launcher jar available to the container with `FABRIC_LAUNCHER`, relative to `/data` (such as `-e FABRIC_LAUNCHER=fabric-server-custom.jar`)
|
||||
- Provide the URL to a custom launcher jar with `FABRIC_LAUNCHER_URL` (such as `-e FABRIC_LAUNCHER_URL=http://HOST/fabric-server-custom.jar`)
|
||||
```yaml
|
||||
TYPE: FABRIC
|
||||
MODRINTH_PROJECTS: |
|
||||
fabric-api
|
||||
```
|
||||
|
||||
See the [Working with mods and plugins](../../mods-and-plugins/index.md) section to set up Fabric mods and configuration.
|
||||
## Alternate launcher
|
||||
|
||||
If you wish to use an alternative launcher you can:
|
||||
|
||||
- Provide the path to a custom launcher jar available to the container with `FABRIC_LAUNCHER`, relative to `/data` (such as `-e FABRIC_LAUNCHER=fabric-server-custom.jar`)
|
||||
- Provide the URL to a custom launcher jar with `FABRIC_LAUNCHER_URL` (such as `-e FABRIC_LAUNCHER_URL=http://HOST/fabric-server-custom.jar`)
|
||||
|
||||
## Force re-install
|
||||
|
||||
If the Fabric launcher jar becomes corrupted you can temporarily set FABRIC_FORCE_REINSTALL to "true" to have it re-installed on next startup.
|
||||
@@ -45,6 +45,11 @@ In both of the cases above, there is no need for the `VERSION` or `FORGE_VERSION
|
||||
|
||||
If an error occurred while installing Forge, it might be possible to resolve by temporarily setting `FORGE_FORCE_REINSTALL` to "true". Be sure to remove that variable after successfully starting the server.
|
||||
|
||||
URLs configurable via environment variables:
|
||||
|
||||
- `FORGE_PROMOTIONS_URL`: default is https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json
|
||||
- `FORGE_MAVEN_REPO_URL`: default is https://maven.minecraftforge.net
|
||||
|
||||
## Alternatives
|
||||
|
||||
### NeoForge
|
||||
|
||||
@@ -41,7 +41,9 @@ Configuration options with defaults:
|
||||
|
||||
## NanoLimbo
|
||||
|
||||
A [NanoLimbo](https://github.com/Nan1t/NanoLimbo) server can be run by setting `TYPE` to `NANOLIMBO`.
|
||||
A [NanoLimbo](https://github.com/BoomEaro/NanoLimbo) server can be run by setting `TYPE` to `NANOLIMBO`.
|
||||
|
||||
Note: it is a fork of the original [NanoLimbo](https://github.com/Nan1t/NanoLimbo) made by Nan1t
|
||||
|
||||
An alternate Limbo server
|
||||
|
||||
|
||||
@@ -126,3 +126,7 @@ If you have attached a host directory to the `/data` volume, then you can instal
|
||||
|
||||
!!! note
|
||||
The Folia type inherits from the Paper type. Paper's variables will override the Folia ones.
|
||||
|
||||
## Extra config
|
||||
|
||||
- `SKIP_DOWNLOAD_DEFAULTS`: when set to "true" startup will entirely skip checking for default Paper/Bukkit/Spigot config files to download
|
||||
@@ -10,29 +10,29 @@ or explicitly include the tag, such as
|
||||
|
||||
where `<tag>` refers to the first column of this table:
|
||||
|
||||
| Tag | Java version | Linux | JVM Type | Architecture | Note |
|
||||
|------------------|--------------|--------|--------------------|---------------------|------|
|
||||
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java24 | 24 | Ubuntu | Hotspot | amd64, arm64 | (2) |
|
||||
| java24-graalvm | 24 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (2) |
|
||||
| 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 (3) | amd64, arm64 | |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
|
||||
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | |
|
||||
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| 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 | Note |
|
||||
|----------------|--------------|--------|--------------------|---------------------|------|
|
||||
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java24 | 24 | Ubuntu | Hotspot | amd64, arm64 | (2) |
|
||||
| java24-graalvm | 24 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (2) |
|
||||
| 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 (3) | amd64, arm64 | |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
|
||||
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | |
|
||||
| java16 | 16 | Ubuntu | Hotspot | amd64, arm64, armv7 | (4) |
|
||||
| java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
|
||||
Notes
|
||||
|
||||
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.
|
||||
2. Short-term variant, subject to deprecation upon next version introduction
|
||||
3. Based on the [Oracle GraalMV images](https://blogs.oracle.com/java/post/new-oracle-graalvm-container-images), which as of JDK 17, are now under the [GraalVM Free License](https://blogs.oracle.com/java/post/graalvm-free-license) incorporating what used to be known as the GraalVM Enterprise.
|
||||
4. This version of Java is [recommended for PaperMC 1.16.5](https://docs.papermc.io/paper/getting-started/#requirements)
|
||||
|
||||
!!! example "Example using java8"
|
||||
|
||||
@@ -131,12 +131,15 @@ The following image tags have been deprecated and are no longer receiving update
|
||||
- adopt15
|
||||
- openj9-nightly
|
||||
- multiarch-latest
|
||||
- java11
|
||||
- java16/java16-openj9
|
||||
- java16-openj9
|
||||
- java17-graalvm-ce
|
||||
- java17-openj9
|
||||
- java19
|
||||
- java20-graalvm, java20, java20-alpine
|
||||
- java23-*
|
||||
- java8-multiarch is still built and pushed, but please move to java8 instead
|
||||
- java8-alpine
|
||||
- java8-alpine, java8-jdk, java8-openj9, java8-graalvm-ce
|
||||
|
||||
## JSON Listing
|
||||
|
||||
Information about the image tags is available programmatically at <https://raw.githubusercontent.com/itzg/docker-minecraft-server/refs/heads/master/images.json>
|
||||
@@ -9,12 +9,11 @@ services:
|
||||
EULA: true
|
||||
ALLOW_FLIGHT: true
|
||||
MOD_PLATFORM: AUTO_CURSEFORGE
|
||||
# Allocate API key from https://console.curseforge.com/
|
||||
# and set in .env file making sure to double up dollar signs, such as
|
||||
# CF_API_KEY=$$2a$$10$$....
|
||||
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
|
||||
CF_API_KEY: ${CF_API_KEY}
|
||||
CF_SLUG: craftoria
|
||||
MOTD: |
|
||||
A %TYPE% server on %VERSION%
|
||||
running %MODPACK_NAME% %MODPACK_VERSION%
|
||||
MEMORY: 8G
|
||||
volumes:
|
||||
# Use managed volume by default, but can change to a relative path like
|
||||
16
examples/auto-curseforge/skyfactory4/compose.yml
Normal file
16
examples/auto-curseforge/skyfactory4/compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server:java8
|
||||
environment:
|
||||
EULA: "true"
|
||||
MODPACK_PLATFORM: AUTO_CURSEFORGE
|
||||
CF_SLUG: skyfactory-4
|
||||
CF_FILENAME_MATCHER: 4.2.4
|
||||
CF_API_KEY: ${CF_API_KEY}
|
||||
MEMORY: 3G
|
||||
ports:
|
||||
- "25565:25565"
|
||||
volumes:
|
||||
- mc-data:/data
|
||||
volumes:
|
||||
mc-data:
|
||||
@@ -1,157 +0,0 @@
|
||||
####################################################################
|
||||
# FORGE GENERIC_PACK #
|
||||
# #
|
||||
# Date: 20220828 #
|
||||
# #
|
||||
# Mod: TNP Limitless 5 v2.19.0 #
|
||||
# #
|
||||
# Notes: Verify that there is no EULA file in the modpack.zip #
|
||||
# if you do not delete it the EULA flag below will be #
|
||||
# overwritten when the modpack is copied and the server #
|
||||
# will not start. #
|
||||
# #
|
||||
####################################################################
|
||||
services:
|
||||
|
||||
####################################################################
|
||||
# Service Name #
|
||||
# #
|
||||
# Define Service Name here. If using RCON this name will be #
|
||||
# referenced again as RWA_RCON_HOST below. #
|
||||
# #
|
||||
# Example: 'name:' or 'mc_atm6:' #
|
||||
####################################################################
|
||||
mc_tnp5:
|
||||
|
||||
####################################################################
|
||||
# Image & Container Name #
|
||||
# #
|
||||
# Specify Image Name and Java Version. The 'image' will always be #
|
||||
# 'itzg/minecraft-server' however the tag added to the end is #
|
||||
# where you can specify the java version or container architecture.#
|
||||
# See readme.md for a full list. #
|
||||
# #
|
||||
# 'container_name:' This can be anything you like. This is the name#
|
||||
# that will show when you run 'docker ps' commands. #
|
||||
####################################################################
|
||||
image: itzg/minecraft-server
|
||||
container_name: mc_tnp5
|
||||
|
||||
####################################################################
|
||||
# Server Ports #
|
||||
# #
|
||||
# Specify external port. #
|
||||
####################################################################
|
||||
ports:
|
||||
- 25565:25565
|
||||
|
||||
####################################################################
|
||||
# Automatic Server Restart #
|
||||
# #
|
||||
# Define a restart policy here. #
|
||||
# - 'no' = Do not restart. #
|
||||
# - 'on-failure' = Restart if container exits because an error. #
|
||||
# - 'always' = Regardless of stop reason. #
|
||||
# - 'unless-stopped' = Similar to always except if stopped. #
|
||||
####################################################################
|
||||
restart: unless-stopped
|
||||
|
||||
####################################################################
|
||||
# Volume and Folder Access #
|
||||
# #
|
||||
# This section defines what folders and volumes you want to give #
|
||||
# this container access to. It is recommended to leaves these set #
|
||||
# to the default values unless you know what you are doing. #
|
||||
# #
|
||||
# Place your mod zip file in a folder called 'modpacks' in the #
|
||||
# same directory you place this docker-compose file. #
|
||||
# #
|
||||
# Specify the data volume name or directory here as well. #
|
||||
# In this example the volume name is 'data'. When docker creates #
|
||||
# the volume it will add what ever name you give it here to the #
|
||||
# end of the container name specified above. In this example it #
|
||||
# would be named 'mc_atm6_data'. If you change this be sure to #
|
||||
# update the volume name at the bottom of this config. #
|
||||
####################################################################
|
||||
volumes:
|
||||
- ./modpacks:/modpacks:ro
|
||||
- data:/data
|
||||
|
||||
####################################################################
|
||||
# EULA #
|
||||
# #
|
||||
# Accept EULA by setting to "true" #
|
||||
####################################################################
|
||||
environment:
|
||||
EULA: "true"
|
||||
|
||||
####################################################################
|
||||
# FORGE INSTALL #
|
||||
# #
|
||||
# Sets install type to FORGE and specifys the zip folder name #
|
||||
# and location of your mod pack. #
|
||||
# #
|
||||
# TYPE: Defines the install type as FORGE #
|
||||
# #
|
||||
# VERSION: Defines the version of MC the modpack is based on. #
|
||||
# #
|
||||
# FORGE_VERSION: Defines the version of FORGE the modpack uses. #
|
||||
# This can usually be found in the modpack.zip as #
|
||||
# installer.jar #
|
||||
# #
|
||||
# GENERIC_PACK: Define where the modpack.zip is located. #
|
||||
# #
|
||||
# Place your mod zip file in a folder called 'modpacks' in the #
|
||||
# same directory you place this docker-compose file. #
|
||||
####################################################################
|
||||
TYPE: FORGE
|
||||
VERSION: 1.18.2
|
||||
FORGE_VERSION: 40.1.73
|
||||
GENERIC_PACK: /modpacks/tnp5.zip
|
||||
|
||||
####################################################################
|
||||
# Server Memory #
|
||||
# #
|
||||
# Set Maximum amount of memory allowed for your server. #
|
||||
####################################################################
|
||||
MEMORY: "8G"
|
||||
|
||||
####################################################################
|
||||
# Logging Options #
|
||||
# #
|
||||
# Set to "true" to delete old logs #
|
||||
####################################################################
|
||||
ENABLE_ROLLING_LOGS: "true"
|
||||
|
||||
####################################################################
|
||||
# Server Timezone #
|
||||
# #
|
||||
# Specify server Timezone #
|
||||
####################################################################
|
||||
TZ: "America/New_York"
|
||||
|
||||
####################################################################
|
||||
# Minecraft Game Options #
|
||||
# #
|
||||
# List any game options you want to define here. A full list can #
|
||||
# be found on the readme.md page on github. #
|
||||
####################################################################
|
||||
OVERRIDE_SERVER_PROPERTIES: "true"
|
||||
DIFFICULTY: "easy"
|
||||
MAX_TICK_TIME: "-1"
|
||||
VIEW_DISTANCE: "6"
|
||||
ALLOW_FLIGHT: "true"
|
||||
OPS: ""
|
||||
MAX_PLAYERS: 10
|
||||
PVP: "false"
|
||||
LEVEL_TYPE: "biomesoplenty"
|
||||
MOTD: "Welcome Home"
|
||||
|
||||
####################################################################
|
||||
# Volumes #
|
||||
# #
|
||||
# Define data volume name here. You should leave this set to the #
|
||||
# default. #
|
||||
####################################################################
|
||||
volumes:
|
||||
data:
|
||||
@@ -1,19 +0,0 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server:${IMAGE_TAG:-latest}
|
||||
volumes:
|
||||
- data:/data
|
||||
- ./modpacks:/modpacks:ro
|
||||
environment:
|
||||
EULA: "true"
|
||||
TYPE: FORGE
|
||||
DEBUG: "${DEBUG:-false}"
|
||||
VERSION: ${VERSION:-1.17.1}
|
||||
FORGE_VERSION: ${FORGE_VERSION:-37.0.90}
|
||||
GENERIC_PACK: /modpacks/${MODPACK:-Server-Files-0.0.21.zip}
|
||||
REMOVE_OLD_MODS: "${REMOVE_OLD_MODS:-false}"
|
||||
ports:
|
||||
- "25565:25565"
|
||||
|
||||
volumes:
|
||||
data: {}
|
||||
@@ -12,6 +12,9 @@ services:
|
||||
# Use Pack ID from https://www.feed-the-beast.com/modpacks/119-ftb-presents-direwolf20-120?tab=about
|
||||
FTB_MODPACK_ID: "119"
|
||||
# FTB_MODPACK_VERSION_ID: ""
|
||||
MOTD: |
|
||||
An FTB server running
|
||||
%MODPACK_NAME% version %MODPACK_VERSION%
|
||||
MEMORY: 4G
|
||||
volumes:
|
||||
# use a named, managed volume for data volume
|
||||
|
||||
15
examples/modrinth/version-from-modrinth-projects/compose.yml
Normal file
15
examples/modrinth/version-from-modrinth-projects/compose.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server
|
||||
environment:
|
||||
EULA: true
|
||||
TYPE: paper
|
||||
MODRINTH_PROJECTS: |
|
||||
viaversion
|
||||
viabackwards
|
||||
griefprevention
|
||||
discordsrv
|
||||
VERSION_FROM_MODRINTH_PROJECTS: true
|
||||
MEMORY: 2G
|
||||
ports:
|
||||
- "25565:25565"
|
||||
@@ -7,7 +7,7 @@ services:
|
||||
EULA: "TRUE"
|
||||
TYPE: MOHIST
|
||||
VERSION: 1.12.2
|
||||
DEBUG: "true"
|
||||
MOHIST_BUILD: 347
|
||||
volumes:
|
||||
- data:/data
|
||||
|
||||
16
examples/packwiz/compose.yml
Normal file
16
examples/packwiz/compose.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server
|
||||
tty: true
|
||||
stdin_open: true
|
||||
environment:
|
||||
EULA: true
|
||||
# Match loader from versions section of https://github.com/packwiz/packwiz-example-pack/blob/v1/pack.toml
|
||||
TYPE: QUILT
|
||||
VERSION: "1.19"
|
||||
QUILT_LOADER_VERSION: "0.17.0"
|
||||
PACKWIZ_URL: https://raw.githubusercontent.com/packwiz/packwiz-example-pack/refs/heads/v1/pack.toml
|
||||
volumes:
|
||||
- ./data:/data
|
||||
ports:
|
||||
- "25565:25565"
|
||||
@@ -18,6 +18,7 @@
|
||||
"better-tips-nbt-tag",
|
||||
"betterf3",
|
||||
"betterfps",
|
||||
"bettergrassify",
|
||||
"biomeinfo",
|
||||
"block-drops-jei-addon",
|
||||
"blur-forge",
|
||||
@@ -27,6 +28,7 @@
|
||||
"chunk-animator",
|
||||
"clickable-advancements",
|
||||
"compass-coords",
|
||||
"config-menus-forge",
|
||||
"configured",
|
||||
"controllable",
|
||||
"controlling",
|
||||
@@ -36,6 +38,7 @@
|
||||
"dark-mode-everywhere",
|
||||
"defensive-measures",
|
||||
"ding",
|
||||
"distraction-free-recipes",
|
||||
"drippy-loading-screen",
|
||||
"dynamic-surroundings",
|
||||
"dynamic-view",
|
||||
@@ -62,6 +65,8 @@
|
||||
"fancymenu",
|
||||
"farsight",
|
||||
"faster-ladder-climbing",
|
||||
"fastquit",
|
||||
"fastquit-forge",
|
||||
"flerovium",
|
||||
"foamfix-optimization-mod",
|
||||
"forgeskyboxes",
|
||||
@@ -107,6 +112,8 @@
|
||||
"overloaded-armor-bar",
|
||||
"packmenu",
|
||||
"packmodemenu",
|
||||
"particle-effects",
|
||||
"particle-effects-reforged",
|
||||
"particular",
|
||||
"particular-reforged",
|
||||
"reauth",
|
||||
@@ -150,8 +157,10 @@
|
||||
"vanillafix",
|
||||
"visuality",
|
||||
"waila-harvestability",
|
||||
"waila-stages",
|
||||
"wakes-reforged",
|
||||
"wawla",
|
||||
"welcome-screen",
|
||||
"xaeroplus",
|
||||
"yungs-menu-tweaks",
|
||||
"zume"
|
||||
@@ -161,7 +170,7 @@
|
||||
"forceIncludes": ["revelationary"]
|
||||
},
|
||||
"beyond-depth": {
|
||||
"forceIncludes": ["particular-reforged"]
|
||||
"forceIncludes": ["particular-reforged"]
|
||||
},
|
||||
"create-arcane-engineering": {
|
||||
"forceIncludes": ["just-enough-resources-jer"]
|
||||
@@ -175,6 +184,12 @@
|
||||
},
|
||||
"valhelsia-5": {
|
||||
"excludes": ["modernfix"]
|
||||
},
|
||||
"mc-eternal-2": {
|
||||
"forceIncludes": [
|
||||
"particular-reforged",
|
||||
"mob-player-animator"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
"BadOptimizations",
|
||||
"BetterAdvancements",
|
||||
"betterbeds",
|
||||
"BetterF3",
|
||||
"BetterGrassify",
|
||||
"BetterThirdPerson",
|
||||
"BHMenu",
|
||||
"blur",
|
||||
@@ -22,14 +24,21 @@
|
||||
"cherishedworlds",
|
||||
"citresewn",
|
||||
"clickadv",
|
||||
"cobblemon-ui-tweaks",
|
||||
"compass-coords",
|
||||
"connectedness",
|
||||
"connector",
|
||||
"continuity",
|
||||
"controlling",
|
||||
"craftpresence",
|
||||
"cwb",
|
||||
"DisableCustomWorldsAdvice",
|
||||
"distraction_free_recipes",
|
||||
"drippyloadingscreen",
|
||||
"eating-animation",
|
||||
"emi",
|
||||
"emi_loot",
|
||||
"emi_trade",
|
||||
"emiffect",
|
||||
"emitrades",
|
||||
"entity_model_features",
|
||||
@@ -39,14 +48,17 @@
|
||||
"fallingleaves",
|
||||
"fancymenu",
|
||||
"fast-ip-ping",
|
||||
"fastquit",
|
||||
"FauxCustomEntityData",
|
||||
"feytweaks",
|
||||
"figura",
|
||||
"ForgeConfigScreens",
|
||||
"GeckoLibIrisCompat",
|
||||
"gpumemleakfix",
|
||||
"Highlighter",
|
||||
"ImmediatelyFast",
|
||||
"indium",
|
||||
"inventory-profiles-next",
|
||||
"iris",
|
||||
"iris-flywheel",
|
||||
"ItemBorders",
|
||||
@@ -66,9 +78,10 @@
|
||||
"PickUpNotifier",
|
||||
"PresenceFootsteps",
|
||||
"Prism",
|
||||
"reforgium",
|
||||
"reeses_sodium_options",
|
||||
"reforgium",
|
||||
"ResourcePackOverrides",
|
||||
"roughly-enough-items",
|
||||
"ryoamiclights",
|
||||
"screenshot_viewer",
|
||||
"Searchables",
|
||||
@@ -77,13 +90,24 @@
|
||||
"skinlayers3d",
|
||||
"sodium",
|
||||
"sorted_enchantments",
|
||||
"tooltipfix",
|
||||
"visuality",
|
||||
"VR-Combat",
|
||||
"WailaStages",
|
||||
"welcomescreen",
|
||||
"Xaeros_Minimap",
|
||||
"XaerosWorldMap",
|
||||
"YeetusExperimentus",
|
||||
"yungsmenutweaks",
|
||||
"Zoomify",
|
||||
"zume"
|
||||
],
|
||||
"globalForceIncludes": [],
|
||||
"modpacks": {}
|
||||
"modpacks": {
|
||||
"cobbleverse": {
|
||||
"excludes": [
|
||||
"cloth-config"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
"accepts-transfers": {"env": "ACCEPTS_TRANSFERS"},
|
||||
"allow-flight": {"env": "ALLOW_FLIGHT"},
|
||||
"allow-nether": {"env": "ALLOW_NETHER"},
|
||||
"bug-report-link": {"env": "BUG_REPORT_LINK"},
|
||||
"announce-player-achievements": {"env": "ANNOUNCE_PLAYER_ACHIEVEMENTS"},
|
||||
"broadcast-console-to-ops": {"env": "BROADCAST_CONSOLE_TO_OPS"},
|
||||
"broadcast-rcon-to-ops": {"env": "BROADCAST_RCON_TO_OPS"},
|
||||
"bug-report-link": {"env": "BUG_REPORT_LINK"},
|
||||
"difficulty": {"env": "DIFFICULTY"},
|
||||
"enable-command-block": {"env": "ENABLE_COMMAND_BLOCK"},
|
||||
"enable-jmx-monitoring": {"env": "ENABLE_JMX"},
|
||||
@@ -27,6 +28,9 @@
|
||||
"level-seed": {"env": "SEED"},
|
||||
"level-type": {"env": "LEVEL_TYPE"},
|
||||
"log-ips": {"env": "LOG_IPS"},
|
||||
"management-server-enabled": {"env": "MANAGEMENT_SERVER_ENABLED"},
|
||||
"management-server-host": {"env": "MANAGEMENT_SERVER_HOST"},
|
||||
"management-server-port": {"env": "MANAGEMENT_SERVER_PORT"},
|
||||
"max-build-height": {"env": "MAX_BUILD_HEIGHT"},
|
||||
"max-chained-neighbor-updates": {"env": "MAX_CHAINED_NEIGHBOR_UPDATES"},
|
||||
"max-players": {"env": "MAX_PLAYERS"},
|
||||
@@ -42,14 +46,15 @@
|
||||
"previews-chat": {"env": "PREVIEWS_CHAT"},
|
||||
"pvp": {"env": "PVP"},
|
||||
"query.port": {"env": "QUERY_PORT"},
|
||||
"rate-limit": {"env": "RATE_LIMIT"},
|
||||
"rcon.password": {"env": "RCON_PASSWORD"},
|
||||
"rcon.port": {"env": "RCON_PORT"},
|
||||
"region-file-compression": {"env": "REGION_FILE_COMPRESSION"},
|
||||
"resource-pack": {"env": "RESOURCE_PACK"},
|
||||
"require-resource-pack": {"env": "RESOURCE_PACK_ENFORCE"},
|
||||
"resource-pack-id": {"env": "RESOURCE_PACK_ID"},
|
||||
"resource-pack-prompt": {"env": "RESOURCE_PACK_PROMPT"},
|
||||
"resource-pack-sha1": {"env": "RESOURCE_PACK_SHA1"},
|
||||
"require-resource-pack": {"env": "RESOURCE_PACK_ENFORCE"},
|
||||
"resource-pack": {"env": "RESOURCE_PACK"},
|
||||
"server-ip": {"env": "SERVER_IP"},
|
||||
"server-name": {"env": "SERVER_NAME"},
|
||||
"server-port": {"env": "SERVER_PORT"},
|
||||
@@ -59,6 +64,7 @@
|
||||
"spawn-monsters": {"env": "SPAWN_MONSTERS"},
|
||||
"spawn-npcs": {"env": "SPAWN_NPCS"},
|
||||
"spawn-protection": {"env": "SPAWN_PROTECTION"},
|
||||
"status-heartbeat-interval": {"env": "STATUS_HEARTBEAT_INTERVAL"},
|
||||
"sync-chunk-writes": {"env": "SYNC_CHUNK_WRITES"},
|
||||
"use-native-transport": {"env": "USE_NATIVE_TRANSPORT"},
|
||||
"view-distance": {"env": "VIEW_DISTANCE"},
|
||||
|
||||
0
bin/mc-health → files/shims/mc-health
Executable file → Normal file
0
bin/mc-health → files/shims/mc-health
Executable file → Normal file
0
bin/mc-send-to-console → files/shims/mc-send-to-console
Executable file → Normal file
0
bin/mc-send-to-console → files/shims/mc-send-to-console
Executable file → Normal file
0
bin/mcstatus → files/shims/mcstatus
Executable file → Normal file
0
bin/mcstatus → files/shims/mcstatus
Executable file → Normal file
134
images.json
Normal file
134
images.json
Normal file
@@ -0,0 +1,134 @@
|
||||
[
|
||||
{
|
||||
"tag": "latest",
|
||||
"notes": "Always tracks the most recent commit on the main branch",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "stable",
|
||||
"notes": "Always tracks the most recent release",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java24",
|
||||
"java": "24",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java24-graalvm",
|
||||
"java": "24",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java21",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java21-alpine",
|
||||
"java": "21",
|
||||
"distribution": "alpine",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java21-graalvm",
|
||||
"java": "21",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
},
|
||||
{
|
||||
"tag": "java21-jdk",
|
||||
"java": "21",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"jdk": true
|
||||
},
|
||||
{
|
||||
"tag": "java21-graalvm",
|
||||
"java": "21",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
},
|
||||
{
|
||||
"tag": "java17",
|
||||
"java": "17",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java17-alpine",
|
||||
"java": "17",
|
||||
"distribution": "alpine",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java17-graalvm",
|
||||
"java": "17",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java16",
|
||||
"java": "16",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64", "armv7"]
|
||||
},
|
||||
{
|
||||
"tag": "java11",
|
||||
"java": "11",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64", "armv7"],
|
||||
"lts": true
|
||||
},
|
||||
{
|
||||
"tag": "java8",
|
||||
"java": "8",
|
||||
"distribution": "ubuntu",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64", "armv7"],
|
||||
"lts": true
|
||||
},
|
||||
{"tag": "adopt13", "deprecated": true},
|
||||
{"tag": "adopt14", "deprecated": true},
|
||||
{"tag": "adopt15", "deprecated": true},
|
||||
{"tag": "openj9-nightly", "deprecated": true},
|
||||
{"tag": "multiarch-latest", "deprecated": true},
|
||||
{"tag": "java16-openj9", "deprecated": true},
|
||||
{"tag": "java17-graalvm-ce", "deprecated": true},
|
||||
{"tag": "java17-openj9", "deprecated": true},
|
||||
{"tag": "java19", "deprecated": true},
|
||||
{"tag": "java20-graalvm", "deprecated": true},
|
||||
{"tag": "java20", "deprecated": true},
|
||||
{"tag": "java20-alpine", "deprecated": true},
|
||||
{"tag": "java23", "deprecated": true},
|
||||
{"tag": "java8-multiarch", "deprecated": true},
|
||||
{"tag": "java8-alpine", "deprecated": true},
|
||||
{"tag": "java8-jdk", "deprecated": true},
|
||||
{"tag": "java8-openj9", "deprecated": true},
|
||||
{"tag": "java8-graalvm-ce", "deprecated": true}
|
||||
]
|
||||
@@ -50,7 +50,7 @@ fi
|
||||
|
||||
if isTrue "${DEBUG_MEMORY:-false}"; then
|
||||
log "Memory usage and availability (in MB)"
|
||||
uname -a
|
||||
uname -pars
|
||||
free -m
|
||||
fi
|
||||
|
||||
@@ -101,21 +101,38 @@ if isTrue "${ENABLE_AUTOPAUSE}" && isTrue "${ENABLE_AUTOSTOP}"; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
proxyArgs=()
|
||||
if [[ $PROXY ]]; then
|
||||
export http_proxy="$PROXY"
|
||||
export https_proxy="$PROXY"
|
||||
export JAVA_TOOL_OPTIONS+="-Djava.net.useSystemProxies=true"
|
||||
log "INFO: Giving proxy time to startup..."
|
||||
sleep 5
|
||||
|
||||
IFS=":"
|
||||
read -ra parts <<< "$PROXY"
|
||||
IFS=" "
|
||||
: "${PROXY_HOST=$(firstArrayElement parts)}"
|
||||
shiftArray parts
|
||||
: "${PROXY_PORT=$(firstArrayElement parts)}"
|
||||
fi
|
||||
|
||||
# https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html
|
||||
proxyArgs=()
|
||||
function addToProxyArgs() {
|
||||
if [[ $2 ]]; then
|
||||
proxyArgs+=("-D$1=$2")
|
||||
fi
|
||||
}
|
||||
addToProxyArgs http.proxyHost "${PROXY_HOST:-}"
|
||||
addToProxyArgs http.proxyPort "${PROXY_PORT:-}"
|
||||
addToProxyArgs http.nonProxyHosts "${PROXY_NON_PROXY_HOSTS:-}"
|
||||
export MC_IMAGE_HELPER_OPTS+=" ${proxyArgs[*]}"
|
||||
|
||||
function fixJavaPath() {
|
||||
# Some Docker management UIs grab all the image declared variables and present them for configuration.
|
||||
# When upgrading images across Java versions, that creates a mismatch in PATH's expected by base image.
|
||||
# When upgrading images across Java versions, that creates parts mismatch in PATH's expected by base image.
|
||||
if ! which java > /dev/null; then
|
||||
logError " Your Docker provider has an annoying flaw where it"
|
||||
logError " tries to set PATH even though the container establishes"
|
||||
logError " a very specific value."
|
||||
logError " parts very specific value."
|
||||
sleep 2
|
||||
# now find where java might be
|
||||
for d in /opt/java/openjdk/bin /usr/bin; do
|
||||
@@ -139,6 +156,15 @@ cd /data || exit 1
|
||||
export DECLARED_TYPE=${TYPE^^}
|
||||
export DECLARED_VERSION="$VERSION"
|
||||
|
||||
if isTrue "${VERSION_FROM_MODRINTH_PROJECTS:-}" && [[ ${MODRINTH_PROJECTS:-} ]]; then
|
||||
if ! VERSION=$(mc-image-helper version-from-modrinth-projects --projects "${MODRINTH_PROJECTS}"); then
|
||||
logError "failed to resolve version from MODRINTH_PROJECTS: ${MODRINTH_PROJECTS}"
|
||||
exit 1
|
||||
fi
|
||||
log "Resolved Minecraft version $VERSION from Modrinth projects"
|
||||
export VERSION
|
||||
fi
|
||||
|
||||
if isTrue "${ENABLE_AUTOPAUSE}"; then
|
||||
"${SCRIPTS:-/}start-autopause"
|
||||
fi
|
||||
|
||||
@@ -36,6 +36,12 @@ function getModLoaderVersion() {
|
||||
function getMinecraftVersion() {
|
||||
jq -r ".modPackTargets.mcVersion" ${ftbManifest}
|
||||
}
|
||||
function getModpackName() {
|
||||
jq -r ".name" ${ftbManifest}
|
||||
}
|
||||
function getModpackVersion() {
|
||||
jq -r ".versionName" ${ftbManifest}
|
||||
}
|
||||
|
||||
if [[ $(getDistro) = alpine ]]; then
|
||||
logError "The FTBA installer is not supported on Alpine. Use the java8-multiarch image tag instead."
|
||||
@@ -102,7 +108,9 @@ modLoader="$(getModLoaderName)"
|
||||
modLoaderVersion="$(getModLoaderVersion)"
|
||||
mcVersion=$(getMinecraftVersion)
|
||||
VERSION="$mcVersion"
|
||||
export VERSION
|
||||
MODPACK_NAME=$(getModpackName)
|
||||
MODPACK_VERSION=$(getModpackVersion)
|
||||
export VERSION MODPACK_NAME MODPACK_VERSION
|
||||
|
||||
variants=(
|
||||
run.sh
|
||||
|
||||
@@ -9,15 +9,24 @@ export TYPE=FABRIC
|
||||
: "${FABRIC_LAUNCHER:=}"
|
||||
: "${FABRIC_LAUNCHER_URL:=}"
|
||||
: "${FABRIC_LOADER_VERSION:=LATEST}"
|
||||
: "${FABRIC_FORCE_REINSTALL:=false}"
|
||||
|
||||
resultsFile=/data/.install-fabric.env
|
||||
|
||||
isDebugging && set -x
|
||||
|
||||
commonArgs=(
|
||||
--results-file="${resultsFile}"
|
||||
)
|
||||
if isTrue "${FABRIC_FORCE_REINSTALL}"; then
|
||||
log "Forcing re-install of Fabric"
|
||||
commonArgs+=(--force-reinstall)
|
||||
fi
|
||||
|
||||
# Custom fabric jar
|
||||
if [[ $FABRIC_LAUNCHER ]]; then
|
||||
if ! mc-image-helper install-fabric-loader \
|
||||
--results-file=${resultsFile} \
|
||||
"${commonArgs[@]}" \
|
||||
--from-local-file="$FABRIC_LAUNCHER"; then
|
||||
logError "Failed to use provided Fabric launcher"
|
||||
exit 1
|
||||
@@ -26,7 +35,7 @@ if [[ $FABRIC_LAUNCHER ]]; then
|
||||
# Custom fabric jar url
|
||||
elif [[ $FABRIC_LAUNCHER_URL ]]; then
|
||||
if ! mc-image-helper install-fabric-loader \
|
||||
--results-file=${resultsFile} \
|
||||
"${commonArgs[@]}" \
|
||||
--from-url="$FABRIC_LAUNCHER_URL"; then
|
||||
logError "Failed to installFabric launcher from $FABRIC_LAUNCHER_URL"
|
||||
exit 1
|
||||
@@ -35,7 +44,7 @@ elif [[ $FABRIC_LAUNCHER_URL ]]; then
|
||||
# Official fabric launcher
|
||||
else
|
||||
if ! mc-image-helper install-fabric-loader \
|
||||
--results-file=${resultsFile} \
|
||||
"${commonArgs[@]}" \
|
||||
--minecraft-version="${VERSION}" \
|
||||
--installer-version="${FABRIC_LAUNCHER_VERSION}" \
|
||||
--loader-version="${FABRIC_LOADER_VERSION}"; then
|
||||
|
||||
@@ -14,6 +14,7 @@ resultsFile=/data/.install-modrinth.env
|
||||
: "${MODRINTH_FORCE_INCLUDE_FILES=}"
|
||||
: "${MODRINTH_OVERRIDES_EXCLUSIONS=}"
|
||||
: "${MODRINTH_DEFAULT_EXCLUDE_INCLUDES=/image/modrinth-exclude-include.json}"
|
||||
: "${MODRINTH_FORCE_MODLOADER_REINSTALL:=${FORCE_MODLOADER_REINSTALL:-false}}"
|
||||
|
||||
if [[ ! $MODRINTH_MODPACK ]]; then
|
||||
logError "MODRINTH_MODPACK must be set when using TYPE/MODPACK_PLATFORM/MOD_PLATFORM of MODRINTH"
|
||||
@@ -33,6 +34,9 @@ args=(
|
||||
if [[ $MODRINTH_IGNORE_MISSING_FILES ]]; then
|
||||
args+=(--ignore-missing-files "$MODRINTH_IGNORE_MISSING_FILES")
|
||||
fi
|
||||
if isTrue "${MODRINTH_FORCE_MODLOADER_REINSTALL}"; then
|
||||
args+=(--force-modloader-reinstall)
|
||||
fi
|
||||
|
||||
case "${VERSION^^}" in
|
||||
LATEST)
|
||||
|
||||
@@ -14,38 +14,39 @@ mohistType="${TYPE,,}"
|
||||
mohistApiUrl="https://api.mohistmc.com/project/${mohistType}"
|
||||
mohistDownloadsPage="https://mohistmc.com/downloadSoftware?project=${mohistType}"
|
||||
|
||||
if ! get --exists "${mohistApiUrl}/${VERSION}/builds"; then
|
||||
logError "${mohistType} builds do not exist for ${VERSION}"
|
||||
logError " check ${mohistDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${MOHIST_BUILD}" == "lastSuccessfulBuild" ]]; then
|
||||
# Get the latest build number from the API
|
||||
if ! buildNumber=$(
|
||||
get --json-path '$[0].id' "${mohistApiUrl}/${VERSION}/builds"
|
||||
); then
|
||||
logError "failed to list ${mohistType} builds for ${VERSION}"
|
||||
if [[ "${MOHIST_BUILD}" != "lastSuccessfulBuild" ]] && [[ "${VERSION,,}" != latest ]] && [[ -f "/data/${mohistType}-${VERSION}-${MOHIST_BUILD}-server.jar" ]]; then
|
||||
log "Skipping Mohist build lookup since server jar exists"
|
||||
SERVER="/data/${mohistType}-${VERSION}-${MOHIST_BUILD}-server.jar"
|
||||
else
|
||||
if ! get --exists "${mohistApiUrl}/${VERSION}/builds"; then
|
||||
logError "${mohistType} builds do not exist for ${VERSION}"
|
||||
logError " check ${mohistDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
exit 1
|
||||
fi
|
||||
MOHIST_BUILD="${buildNumber}"
|
||||
fi
|
||||
|
||||
downloadUrl="${mohistApiUrl}/${VERSION}/builds/${MOHIST_BUILD}/download"
|
||||
if [[ "${MOHIST_BUILD}" == "lastSuccessfulBuild" ]]; then
|
||||
# Get the latest build number from the API
|
||||
if ! buildNumber=$(
|
||||
get --json-path '$[0].id' "${mohistApiUrl}/${VERSION}/builds"
|
||||
); then
|
||||
logError "failed to list ${mohistType} builds for ${VERSION}"
|
||||
exit 1
|
||||
fi
|
||||
MOHIST_BUILD="${buildNumber}"
|
||||
fi
|
||||
|
||||
if [[ -z "${downloadUrl}" ]]; then
|
||||
logError "Could not find build ${MOHIST_BUILD} for version ${VERSION}"
|
||||
logError " check ${mohistDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
exit 1
|
||||
fi
|
||||
downloadUrl="${mohistApiUrl}/${VERSION}/builds/${MOHIST_BUILD}/download"
|
||||
|
||||
SERVER="/data/${mohistType}-${VERSION}-${MOHIST_BUILD}-server.jar"
|
||||
if [[ -z "${downloadUrl}" ]]; then
|
||||
logError "Could not find build ${MOHIST_BUILD} for version ${VERSION}"
|
||||
logError " check ${mohistDownloadsPage} for available versions"
|
||||
logError " and set VERSION accordingly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "${SERVER}" ]; then
|
||||
log "Downloading ${mohistType^} build ${MOHIST_BUILD} for ${VERSION}"
|
||||
get -o "${SERVER}" "${downloadUrl}"
|
||||
SERVER="/data/${mohistType}-${VERSION}-${MOHIST_BUILD}-server.jar"
|
||||
get --skip-existing -o "${SERVER}" "${downloadUrl}"
|
||||
fi
|
||||
|
||||
if [[ "${mohistType}" == "mohist" ]]; then
|
||||
|
||||
@@ -7,7 +7,7 @@ isDebugging && set -x
|
||||
if ! SERVER=$(mc-image-helper github download-latest-asset \
|
||||
--output-directory=/data \
|
||||
--name-pattern="NanoLimbo-.+?(?<!-sources)\.jar" \
|
||||
Nan1t/NanoLimbo
|
||||
BoomEaro/NanoLimbo
|
||||
); then
|
||||
logError "Failed to download NanoLimbo"
|
||||
exit 1
|
||||
|
||||
@@ -10,7 +10,7 @@ handleDebugMode
|
||||
: "${PAPER_CHANNEL:=default}"
|
||||
: "${PAPER_DOWNLOAD_URL:=}"
|
||||
: "${PAPER_CUSTOM_JAR:=}"
|
||||
: "${PAPER_CONFIG_DEFAULTS_REPO:=${PAPER_CONFIG_REPO:=https://raw.githubusercontent.com/dayyeeet/minecraft-default-configs/main}}"
|
||||
: "${PAPER_CONFIG_DEFAULTS_REPO:=${PAPER_CONFIG_REPO:=https://raw.githubusercontent.com/Shonz1/minecraft-default-configs/main}}"
|
||||
|
||||
resultsFile=/data/.paper.env
|
||||
if [[ $PAPER_CUSTOM_JAR ]]; then
|
||||
|
||||
@@ -21,7 +21,9 @@ PUFFERFISH_BUILD_JSON=$(curl -X GET -s "https://ci.pufferfish.host/job/Pufferfis
|
||||
PUFFERFISH_BUILD_URL=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.url // empty' )
|
||||
# Example: "fileName": "pufferfish-paperclip-1.18.2-R0.1-SNAPSHOT-reobf.jar",
|
||||
PUFFERFISH_BUILD_FILENAME=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.artifacts[].fileName // empty' )
|
||||
PUFFERFISH_BUILD_DOWNLOAD_URL="${PUFFERFISH_BUILD_URL}artifact/build/libs/${PUFFERFISH_BUILD_FILENAME}"
|
||||
# Example: "relativePath": "pufferfish-server/build/libs/pufferfish-paperclip-1.21.7-R0.1-SNAPSHOT-mojmap.jar",
|
||||
PUFFERFISH_BUILD_PATH=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.artifacts[].relativePath // empty' )
|
||||
PUFFERFISH_BUILD_DOWNLOAD_URL="${PUFFERFISH_BUILD_URL}artifact/${PUFFERFISH_BUILD_PATH}"
|
||||
|
||||
# Setting server to the Jar filename for export.
|
||||
export SERVER=$PUFFERFISH_BUILD_FILENAME
|
||||
|
||||
@@ -151,16 +151,19 @@ if isTrue "${ENABLE_JMX}"; then
|
||||
log "JMX is enabled. Make sure you have port forwarding for ${JMX_PORT}"
|
||||
fi
|
||||
|
||||
: "${USE_AIKAR_FLAGS:=false}"
|
||||
: "${USE_MEOWICE_FLAGS:=false}"
|
||||
: "${USE_MEOWICE_GRAALVM_FLAGS:=false}"
|
||||
|
||||
if isTrue "${USE_MEOWICE_FLAGS}"; then
|
||||
java_major_version=$(mc-image-helper java-release)
|
||||
if [[ $java_major_version -gt 16 ]]; then
|
||||
USE_MEOWICE_GRAALVM_FLAGS="${USE_MEOWICE_GRAALVM_FLAGS:-TRUE}"
|
||||
log "Java version $java_major_version using MeowIce's flags for Java 17+"
|
||||
else
|
||||
log "Your Java version is $java_major_version, MeowIce's flags are for Java 17+ falling back to Aikar's"
|
||||
USE_MEOWICE_FLAGS=FALSE
|
||||
USE_AIKAR_FLAGS=TRUE
|
||||
fi
|
||||
USE_AIKAR_FLAGS=TRUE
|
||||
fi
|
||||
|
||||
if isTrue "${USE_AIKAR_FLAGS}"; then
|
||||
@@ -221,6 +224,7 @@ fi
|
||||
if isTrue "${USE_MEOWICE_FLAGS}"; then
|
||||
JVM_XX_OPTS="${JVM_XX_OPTS}
|
||||
-XX:+UnlockDiagnosticVMOptions
|
||||
-XX:+UnlockExperimentalVMOptions
|
||||
-XX:G1SATBBufferEnqueueingThresholdPercent=30
|
||||
-XX:G1ConcMarkStepDurationMillis=5
|
||||
-XX:+UseNUMA
|
||||
|
||||
@@ -14,7 +14,9 @@ handleDebugMode
|
||||
: "${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS:=}"
|
||||
: "${PATCH_DEFINITIONS:=}"
|
||||
: "${DEBUG:=false}"
|
||||
: "${DOWNLOAD_DEFAULTS:=}"
|
||||
: "${DOWNLOAD_DEFAULT_CONFIGS:=}"
|
||||
: "${SKIP_DOWNLOAD_DEFAULTS:=false}"
|
||||
|
||||
if isTrue "${REPLACE_ENV_IN_PLACE}"; then
|
||||
log "Replacing env variables in ${REPLACE_ENV_PATHS} that match the prefix '$REPLACE_ENV_VARIABLE_PREFIX' ..."
|
||||
@@ -27,22 +29,28 @@ 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
|
||||
logWarning "One or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
|
||||
if isFalse "$SKIP_DOWNLOAD_DEFAULTS"; then
|
||||
commonArgs=(
|
||||
--skip-existing
|
||||
--skip-up-to-date=false
|
||||
--quiet-when-skipped
|
||||
--ignore-missing-sources
|
||||
)
|
||||
if [[ $DOWNLOAD_DEFAULT_CONFIGS ]]; then
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data/config \
|
||||
"${commonArgs[@]}" \
|
||||
"$DOWNLOAD_DEFAULT_CONFIGS"; then
|
||||
logWarning "One or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [[ $DOWNLOAD_DEFAULTS ]]; then
|
||||
log "Downloading default top-level configs, if needed"
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data \
|
||||
--skip-existing --skip-up-to-date=false \
|
||||
"$DOWNLOAD_DEFAULTS" 2> /dev/null; then
|
||||
logWarning "One or more default files were not available from $DOWNLOAD_DEFAULTS"
|
||||
if [[ $DOWNLOAD_DEFAULTS ]]; then
|
||||
if ! mc-image-helper mcopy \
|
||||
--to /data \
|
||||
"${commonArgs[@]}" \
|
||||
"$DOWNLOAD_DEFAULTS"; then
|
||||
logWarning "One or more default files were not available from $DOWNLOAD_DEFAULTS"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ set -e -o pipefail
|
||||
: "${REMOVE_OLD_MODS_DEPTH:=1} "
|
||||
: "${REMOVE_OLD_MODS_INCLUDE:=*.jar,*-version.json}"
|
||||
: "${CF_API_KEY_FILE:=}" # Path to file containing CurseForge API key
|
||||
: "${MODRINTH_LOADER:=}"
|
||||
sum_file=/data/.generic_pack.sum
|
||||
|
||||
if [[ -n ${CF_API_KEY_FILE} ]]; then
|
||||
@@ -263,13 +264,21 @@ function handleModrinthProjects() {
|
||||
fi
|
||||
|
||||
if [[ $MODRINTH_PROJECTS ]]; then
|
||||
if isFamily HYBRID; then
|
||||
|
||||
if isType CUSTOM; then
|
||||
if ! [[ $MODRINTH_LOADER ]]; then
|
||||
logError "MODRINTH_LOADER must be set when using TYPE=CUSTOM and MODRINTH_PROJECTS"
|
||||
exit 1
|
||||
fi
|
||||
loader="${MODRINTH_LOADER,,}"
|
||||
elif isFamily HYBRID; then
|
||||
loader=${HYBRIDTYPE}
|
||||
elif isFamily VANILLA; then
|
||||
loader=datapack
|
||||
else
|
||||
loader="${TYPE,,}"
|
||||
fi
|
||||
|
||||
mc-image-helper modrinth \
|
||||
--output-directory=/data \
|
||||
--world-directory="${LEVEL:-world}" \
|
||||
|
||||
@@ -411,7 +411,7 @@ function isFamily() {
|
||||
function isType() {
|
||||
for t in "${@}"; do
|
||||
# shellcheck disable=SC2153
|
||||
if [[ $TYPE == "$t" ]]; then
|
||||
if [[ ${TYPE^^} == "${t^^}" ]]; then
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
@@ -538,4 +538,18 @@ function buildDownloadList() {
|
||||
result+="${repoUrl}/${version}/$c"
|
||||
done
|
||||
echo "$result"
|
||||
}
|
||||
}
|
||||
|
||||
function firstArrayElement {
|
||||
local -n a="$1"
|
||||
if (( ${#a[@]} )); then
|
||||
echo "${a[0]}"
|
||||
fi
|
||||
}
|
||||
|
||||
function shiftArray {
|
||||
local -n a="$1"
|
||||
if (( ${#a[@]} )); then
|
||||
a=("${a[@]:1}")
|
||||
fi
|
||||
}
|
||||
|
||||
9
tests/setuponlytests/nanolimbo/docker-compose.yml
Normal file
9
tests/setuponlytests/nanolimbo/docker-compose.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
mc:
|
||||
restart: "no"
|
||||
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||
environment:
|
||||
EULA: "TRUE"
|
||||
TYPE: NANOLIMBO
|
||||
volumes:
|
||||
- ./data:/data
|
||||
1
tests/setuponlytests/nanolimbo/verify.sh
Normal file
1
tests/setuponlytests/nanolimbo/verify.sh
Normal file
@@ -0,0 +1 @@
|
||||
mc-image-helper assert fileExists "/data/NanoLimbo-*.jar"
|
||||
Reference in New Issue
Block a user