Compare commits

...

13 Commits

Author SHA1 Message Date
Geoff Bourne
55bc4fd329 Use PAT for auto releaser runs (#3801) 2025-12-13 10:25:29 -06:00
Aki
d7d3cc50a0 Do not overwrite existing NanoLimbo settings.yml (#3799) 2025-12-12 20:16:08 -06:00
Geoff Bourne
d1535c1eeb Add auto-release workflow configuration (#3800) 2025-12-11 20:57:33 -06:00
EmilyxFox
aadf1a8b9f Bump mc-server-runner & document websocket API (#3789) 2025-12-09 21:46:12 -06:00
EmilyxFox
cdbcf41bfc update docs copyright notice year (#3794) 2025-12-09 21:23:14 -06:00
JackHicks02
548bea7786 Add CF_EXCLUDE_ALL_MODS (#3793) 2025-12-09 20:05:15 -06:00
Geoff Bourne
06836b941a gtnh: support grabbing extra mods (#3788) 2025-12-06 17:18:19 -06:00
dependabot[bot]
53fcaabdf7 build(deps): bump docker/metadata-action from 5.9.0 to 5.10.0 in the updates group (#3784) 2025-12-01 07:25:15 -06:00
dependabot[bot]
7922797744 build(deps): bump actions/checkout from 5.0.0 to 6.0.0 (#3771) 2025-11-25 17:52:15 -08:00
Geoff Bourne
afaa4c89a1 Adding inline example of USES_PLUGINS with Cardboard (#3779) 2025-11-25 18:35:04 -06:00
Geoff Bourne
43a7e9a36c Add java25-jdk image variant (#3778) 2025-11-25 18:20:08 -06:00
dependabot[bot]
ac46484072 build(deps): bump mkdocs-material from 9.6.23 to 9.7.0 in /docs in the patches group (#3772) 2025-11-25 15:16:38 -08:00
Sam Horton
c26119b512 Allow custom modloader versions for auto curseforge (#3759) 2025-11-23 11:15:39 -08:00
19 changed files with 240 additions and 58 deletions

15
.github/workflows/auto-release.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Auto release
on:
schedule:
- cron: "0 14 * * *"
workflow_dispatch:
jobs:
auto-release:
runs-on: ubuntu-latest
steps:
- uses: zenengeo/github-auto-release-action@main
with:
stable-duration: 3d
force-duration: 14d
token: '${{ secrets.GH_TOKEN }}'

View File

@@ -22,6 +22,7 @@ jobs:
# NOTE: the "latest" variant is identified in the Docker meta step's 'latest' config
variant:
- java25
- java25-jdk
- java25-graalvm
- java21
- java21-alpine
@@ -29,12 +30,10 @@ jobs:
- java21-jdk
- java17
- java17-graalvm
- java17-alpine
- java16
- java11
- java8
- java8-graalvm-ce
- java8-openj9
- java8-jdk
include:
# JAVA 25
@@ -42,6 +41,10 @@ jobs:
baseImage: eclipse-temurin:25-jre
platforms: linux/amd64,linux/arm64
mcVersion: latest
- variant: java25-jdk
baseImage: eclipse-temurin:25
platforms: linux/amd64,linux/arm64
mcVersion: latest
- variant: java25-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:25-ol10
platforms: linux/amd64,linux/arm64
@@ -73,10 +76,6 @@ jobs:
baseImage: container-registry.oracle.com/graalvm/jdk:17-ol10
platforms: linux/amd64,linux/arm64
mcVersion: 1.20.4
- variant: java17-alpine
baseImage: eclipse-temurin:17-jre-alpine
platforms: linux/amd64
mcVersion: 1.20.4
# JAVA 16
- variant: java16
baseImage: adoptopenjdk:16-jre-hotspot
@@ -105,12 +104,6 @@ jobs:
platforms: linux/amd64,linux/arm64
mcVersion: 1.12.2
# Pin version for Java 8
# 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.46.0
env:
IMAGE_TO_TEST: "${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}"
@@ -119,14 +112,14 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v6.0.0
with:
# for build-files step
fetch-depth: 0
- name: Docker meta
id: meta
uses: docker/metadata-action@v5.9.0
uses: docker/metadata-action@v5.10.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.

View File

@@ -50,7 +50,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v5.0.0
uses: actions/checkout@v6.0.0
with:
# for build-files step
fetch-depth: 0

View File

@@ -44,12 +44,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.5
ARG MC_SERVER_RUNNER_VERSION=1.14.0
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.50.6
ARG MC_HELPER_VERSION=1.51.1
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

@@ -27,6 +27,18 @@ There are optional volume paths that can be attached to supply content to be cop
`/plugins`
: content in this directory is synchronized into `/data/plugins` for server types that use plugins, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_PLUGINS_SRC` and destination by setting `COPY_PLUGINS_DEST`. If using a mod-based loader, such as Forge or Fabric, but a hybrid mod like [Cardboard](https://modrinth.com/mod/cardboard), then set `USES_PLUGINS` to have the automation utilize `/plugins` mount.
!!! example "Using Cardboard plugins with Fabric"
```yaml
environment:
EULA: "TRUE"
TYPE: "FABRIC"
MODRINTH_PROJECTS: |
fabric-api
cardboard
USES_PLUGINS: true
```
`/mods`
: content in this directory is synchronized into `/data/mods` for server types that use mods, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_MODS_SRC` and destination by setting `COPY_MODS_DEST`.

View File

@@ -1,7 +1,10 @@
mkdocs-material == 9.6.23
mkdocs-material == 9.7.0
mkdocs-autorefs == 1.4.3
mkdocstrings[python] == 0.30.1
mkdocs-literate-nav == 0.6.2
mdx-gh-links == 0.4
# need to pin for auto reload to work
# see https://github.com/mkdocs/mkdocs/issues/4032
click==8.2.1
mkdocs-click == 0.9.0
mkdocs-static-i18n == 1.3.0

View File

@@ -1,5 +1,5 @@
---
title: Sending commands
title: With Docker
---
[RCON](http://wiki.vg/RCON) is enabled by default, so you can `exec` into the container to
@@ -66,4 +66,4 @@ and then Control-p Control-q to **detach**.
!!! info "RCON is required for fully interactive, color console"
RCON must be enabled, which is the default, in order to use a fully interactive console with auto-completion and colorized log output.
RCON must be enabled, which is the default, in order to use a fully interactive console with auto-completion and colorized log output.

View File

@@ -0,0 +1,81 @@
---
title: With websocket
---
With `WEBSOCKET_CONSOLE` set to `true`, logs can be streamed, and commands sent, over a websocket connection.
The API is available on `/websocket`.
## Password
A password must be supplied using the `Sec-WebSocket-Protocol` header. This is done by putting `mc-server-runner-ws-v1` in the first slot, and the password in the second. The password can be set with `RCON_PASSWORD` or `WEBSOCKET_PASSWORD`. The latter overwrites the former. Authentication can be disabled with `WEBSOCKET_DISABLE_AUTHENTICATION`.
??? Example "Examples"
```js title="JavaScript example"
let socket = new WebSocket("http://localhost:80/websocket", ["mc-server-runner-ws-v1", "rcon-password"]);
```
## Allowed origins
A list of comma-separated allowed origins should be supplied with `WEBSOCKET_ALLOWED_ORIGINS`. Origin checking can be disabled with `WEBSOCKET_DISABLE_ORIGIN_CHECK`.
## Listen address
The listen address and port can be set with `WEBSOCKET_ADDRESS` (defaults to `0.0.0.0:80`), but it's recommended to listen on all interfaces when running in Docker.
## Log history
When a connection is established, the last 50 (by default, configurable with `WEBSOCKET_LOG_BUFFER_SIZE`) log lines are sent with a `logHistory` type message.
??? tip "Tip: Remember to forward the websocket port on the host"
```yaml title="compose.yaml"
services:
mc:
ports:
- '25565:25565'
- '80:80'
```
## Environment variables
| Environment Variable | Usage | Default |
| ---------------------------------- | ---------------------------------------------------------- | ------------ |
| `WEBSOCKET_CONSOLE` | Allow remote shell over websocket | `false` |
| `WEBSOCKET_ADDRESS` | Bind address for websocket server | `0.0.0.0:80` |
| `WEBSOCKET_DISABLE_ORIGIN_CHECK` | Disable checking if origin is trusted | `false` |
| `WEBSOCKET_ALLOWED_ORIGINS` | Comma-separated list of trusted origins | ` ` |
| `WEBSOCKET_PASSWORD` | Password will be the same as RCON_PASSWORD if unset | ` ` |
| `WEBSOCKET_DISABLE_AUTHENTICATION` | Disable websocket authentication | `false` |
| `WEBSOCKET_LOG_BUFFER_SIZE` | Number of log lines to save and send to connecting clients | `50` |
## API Schema
```ts title="API Schema"
interface StdinMessage {
type: "stdin";
data: string;
}
interface StdoutMessage {
type: "stdout";
data: string;
}
interface StderrMessage {
type: "stderr";
data: string;
}
interface LogHistoryMessage {
type: "logHistory";
lines: string[];
}
interface AuthFailureMessage {
type: "authFailure";
reason: string;
}
// Messages sent from Client -> Server
export type ClientMessage = StdinMessage;
// Messages sent from Server -> Client
export type ServerMessage =
| StdoutMessage
| StderrMessage
| LogHistoryMessage
| AuthFailureMessage;
```

View File

@@ -7,33 +7,33 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
!!! warning "CurseForge API key usage"
A CurseForge API key is **required** to use this feature. Go to their [developer console](https://console.curseforge.com/), generate an API key, and set the environment variable `CF_API_KEY`.
When entering your API Key in a docker compose file you will need to escape any `$` character with a second `$`. Refer to [this compose file reference section](https://docs.docker.com/compose/compose-file/compose-file-v3/#variable-substitution) for more information.
Example if your key is `$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa`:
```yaml title="compose.yaml"
environment:
CF_API_KEY: '$$11$$22$$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
```
If you use `docker run` you will need to make sure to use single quotes:
```shell
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). You **do not** need to escape `$`'s with a second `$` in the `.env` file **as long as the key is wrapped in single quotes**.
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**.
```title=".env"
CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
```
The variable should to be referenced from the compose file, such as:
```yaml title="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:
```
@@ -42,12 +42,12 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
├── compose.yaml
├── data/
```
To use the equivalent with `docker run` you need to specify the `.env` file explicitly:
```shell
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:
```yaml title="compose.yaml"
service:
@@ -55,7 +55,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
@@ -64,14 +64,14 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
!!! note
Be sure to use the appropriate [image tag for the Java version compatible with the modpack](../../versions/java.md).
Most modpacks require a good amount of memory, so it best to set `MEMORY` to at least "4G" since the default is only 1 GB.
## Usage
Use one of the following to specify the modpack to install:
Pass a page URL to the modpack or a specific file with `CF_PAGE_URL` such as the modpack page "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8" or a specific file "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390".
Pass a page URL to the modpack or a specific file with `CF_PAGE_URL` such as the modpack page "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8" or a specific file "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390".
!!! example "Using CF_PAGE_URL"
@@ -83,7 +83,7 @@ Pass a page URL to the modpack or a specific file with `CF_PAGE_URL` such as the
CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8
```
```title="Using docker run"
docker run -e CF_API_KEY=${CF_API_KEY} -e TYPE=AUTO_CURSEFORGE -e CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/all-the-mods-8
```
@@ -102,7 +102,7 @@ Instead of a URL, the modpack slug can be provided as `CF_SLUG`. The slug is the
CF_API_KEY: ${CF_API_KEY}
CF_SLUG: all-the-mods-8
```
```title="Using docker run"
docker run -e CF_API_KEY=${CF_API_KEY} -e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8
```
@@ -137,6 +137,30 @@ The following examples all refer to version 1.0.7 of ATM8:
Pinning modpack version also pins the mod loader (to the version specified by the modpack). Mod loader version cannot be pinned independently of the modpack.
### Custom modloader versions
By default, AUTO_CURSEFORGE will use the exact modloader version declared by the modpack. However, you can override the modloader version by setting the following environment variable:
- `CF_MOD_LOADER_VERSION`: Override the mod loader version (e.g., `43.4.22`)
!!! example "Override mod loader version"
```yaml
environment:
MODPACK_PLATFORM: AUTO_CURSEFORGE
CF_API_KEY: ${CF_API_KEY}
CF_SLUG: all-the-mods-8
CF_MOD_LOADER_VERSION: "43.4.22"
```
```title="Using docker run"
docker run -e CF_MOD_LOADER_VERSION=43.4.22 -e CF_SLUG=my-fabric-pack ...
```
!!! warning "Compatibility"
Using a custom modloader version that differs significantly from what the modpack was designed for may cause compatibility issues. Use this feature carefully and test thoroughly.
## Manual Downloads
For mod, modpacks, and world files that are not allowed for automated download, the container path `/downloads` can be attached and matching files will be retrieved from there. The subdirectories `mods`, `modpacks`, and `worlds` will also be checked accordingly. To change the source location of downloaded files, set `CF_DOWNLOADS_REPO` to an existing container path. To disable this feature, set `CF_DOWNLOADS_REPO` to an empty string.
@@ -148,12 +172,12 @@ For mod, modpacks, and world files that are not allowed for automated download,
!!! example
Assuming Docker compose is being used:
1. Create a directory next to the `compose.yaml` file. The name doesn't matter, but "downloads" is the common convention
2. From the "Mods Need Download" output, visit the download page of each, click on the file download and save that file into the directory created in the previous step
3. Add a host directory mount to the volumes section where the container path **must be** `/downloads`. The snippet below shows how that will look
4. Re-run `docker compose up -d` to apply the changes
```yaml
volumes:
./downloads:/downloads
@@ -182,7 +206,7 @@ If you wish to use an unpublished modpack zip, set the container path to the fil
```
where an exported manifest file should look like:
```json
{
"minecraft": {
@@ -216,13 +240,13 @@ If you wish to use an unpublished modpack zip, set the container path to the fil
## Exclude client mods
Quite often there are mods that need to be excluded, such as ones that did not properly declare as a client mod via the file's game versions. Similarly, there are some mods that are incorrectly tagged as client only. The following describes two options to exclude/include mods:
Quite often there are mods that need to be excluded, such as ones that did not properly declare as a client mod via the file's game versions. Similarly, there are some mods that are incorrectly tagged as client only. The following describes some options to exclude/include mods:
Mods can be excluded by passing a comma or space delimited list of **project** slugs or IDs via `CF_EXCLUDE_MODS`. Similarly, there are some mods that are incorrectly tagged as client only. For those, pass the **project** slugs or IDs via `CF_FORCE_INCLUDE_MODS`. These lists will be combined with the content of the exclude/include file, if given.
Mods can be excluded by passing a comma or space delimited list of **project** slugs or IDs via `CF_EXCLUDE_MODS`. Similarly, there are some mods that are incorrectly tagged as client only. For those, pass the **project** slugs or IDs via `CF_FORCE_INCLUDE_MODS`. These lists will be combined with the content of the exclude/include file, if given. Alternatively, all mods can be excluded by setting `CF_EXCLUDE_ALL_MODS` to `true`
!!! note
`CF_FORCE_INCLUDE_MODS` will not download additional mods.
For additional mods, refer to [the `CURSEFORGE_FILES` variable](../../mods-and-plugins/curseforge-files.md).
A mod's project ID can be obtained from the right hand side of the project page:
@@ -238,7 +262,7 @@ If needing to iterate on the options above, set `CF_FORCE_SYNCHRONIZE` to "true"
!!! tip "Embedded comments"
Comments can be embedded in the list using the `#` character.
```yaml
CF_EXCLUDE_MODS: |
# Exclude client-side mods not published correctly
@@ -248,7 +272,7 @@ If needing to iterate on the options above, set `CF_FORCE_SYNCHRONIZE` to "true"
## Excluding Overrides Files
Modpack zip files typically include an `overrides` subdirectory that may contain 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 `CF_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.
Modpack zip files typically include an `overrides` subdirectory that may contain 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 `CF_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.
### Ant-style paths
@@ -261,15 +285,15 @@ Ant-style paths can include the following globbing/wildcard symbols:
| `?` | Matches one character |
!!! example
The following compose `environment` entries show how to exclude Iris and Sodium mods from the overrides
```yaml
CF_OVERRIDES_EXCLUSIONS: mods/iris*.jar,mods/sodium*.jar
```
or using newline delimiter, which improves maintainability
```yaml
CF_OVERRIDES_EXCLUSIONS: |
mods/iris*.jar

View File

@@ -747,7 +747,7 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
<td>A path to a file inside of container that contains <strong>YOUR</strong> CurseForge (Eternal) API Key.</td>
<td><code></code></td>
<td>✅</td>
</tr>
</tr>
<tr>
<td><code>CF_PAGE_URL</code></td>
<td>Pass a page URL to the modpack or a specific file</td>
@@ -818,6 +818,12 @@ alternatively, you can mount: <code>/etc/localtime:/etc/localtime:ro
<td><code>false</code></td>
<td>⬜️</td>
</tr>
<tr>
<td><code>CF_MOD_LOADER_VERSION</code></td>
<td>Override the mod loader version declared by the modpack</td>
<td><code></code></td>
<td>⬜️</td>
</tr>
</tbody>
</table>

View File

@@ -15,6 +15,7 @@ where `<tag>` refers to the first column of this table:
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | |
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | |
| java25 | 25 | Ubuntu | Hotspot | amd64, arm64 | |
| java25-jdk | 25 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
| java25-graalvm | 25 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | |
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
@@ -22,14 +23,13 @@ where `<tag>` refers to the first column of this table:
| 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.
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 GraalVM 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)
@@ -134,6 +134,7 @@ The following image tags have been deprecated and are no longer receiving update
- java16-openj9
- java17-graalvm-ce
- java17-openj9
- java17-alpine
- java19
- java20-graalvm, java20, java20-alpine
- java23-*
@@ -143,4 +144,4 @@ The following image tags have been deprecated and are no longer receiving update
## JSON Listing
Information about the image tags is available programmatically at <https://raw.githubusercontent.com/itzg/docker-minecraft-server/refs/heads/master/images.json>
Information about the image tags is available for programmatic access at <https://raw.githubusercontent.com/itzg/docker-minecraft-server/refs/heads/master/images.json>

View File

@@ -0,0 +1,22 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: "TRUE"
MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/
CF_API_KEY: ${CF_API_KEY}
# Example of overriding modloader version for a Fabric modpack
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_SLUG: "cobblemon-fabric"
# Override the mod loader version from the modpack
CF_MOD_LOADER_VERSION: "0.16.14"
MEMORY: "4G"
ports:
- "25565:25565"
volumes:
- ./data:/data
stdin_open: true
tty: true
# See https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#custom-modloader-versions

View File

@@ -15,6 +15,9 @@ services:
# Use to prevent updates
# SKIP_GTNH_UPDATE_CHECK: true
MEMORY: 6G
# Bring in standard extra mods described at https://wiki.gtnewhorizons.com/wiki/Additional_Mods
# MODS: |
# https://github.com/Kynake/BetterFoliage/releases/download/1.2.1/BetterFoliage-LegacyEdition-1.2.1.jar
volumes:
# attach a managed volume, change to a relative or absolute host directory if needed
- mc-data:/data

View File

@@ -0,0 +1,12 @@
{
"file": "/data/settings.yml",
"ops": [
{
"$set": {
"path": "$.bind.port",
"value": "${SERVER_PORT}",
"value-type": "int"
}
}
]
}

View File

@@ -97,7 +97,8 @@
"java": "17",
"distribution": "alpine",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"]
"architectures": ["amd64", "arm64"],
"deprecated": true
},
{
"tag": "java17-graalvm",

View File

@@ -16,7 +16,6 @@ theme:
- navigation.indexes
locale: en
palette:
# Palette toggle for automatic mode
- media: "(prefers-color-scheme)"
toggle:
@@ -71,7 +70,7 @@ markdown_extensions:
user: camalot
repo: mkdocs-test
- mkdocs-click
copyright: Copyright &copy; itzg 2024.
copyright: Copyright &copy; itzg 2025.
plugins:
- search
- autorefs

View File

@@ -14,6 +14,7 @@ set -eu
: "${CF_IGNORE_MISSING_FILES:=}"
: "${CF_EXCLUDE_INCLUDE_FILE=/image/cf-exclude-include.json}"
: "${CF_EXCLUDE_MODS:=}"
: "${CF_EXCLUDE_ALL_MODS:=}"
: "${CF_FORCE_INCLUDE_MODS:=}"
: "${CF_SET_LEVEL_FROM:=}" # --set-level-from
: "${CF_OVERRIDES_SKIP_EXISTING:=false}" # --overrides-skip-existing
@@ -22,6 +23,7 @@ set -eu
: "${CF_MODPACK_MANIFEST:=}"
: "${CF_API_CACHE_DEFAULT_TTL:=}" # as ISO-8601 duration, such as P2D or PT12H
: "${CF_API_KEY_FILE:=}" # Path to file containing CurseForge API key
: "${CF_MOD_LOADER_VERSION:=}" # Override mod loader version
resultsFile=/data/.install-curseforge.env
@@ -63,8 +65,10 @@ setArg --overrides-exclusions CF_OVERRIDES_EXCLUSIONS
setArg --ignore-missing-files CF_IGNORE_MISSING_FILES
setArg --api-cache-default-ttl CF_API_CACHE_DEFAULT_TTL
setArg --exclude-mods CF_EXCLUDE_MODS
setArg --exclude-all-mods CF_EXCLUDE_ALL_MODS
setArg --force-include-mods CF_FORCE_INCLUDE_MODS
setArg --exclude-include-file CF_EXCLUDE_INCLUDE_FILE
setArg --mod-loader-version CF_MOD_LOADER_VERSION
setArg --downloads-repo CF_DOWNLOADS_REPO
if ! mc-image-helper install-curseforge "${args[@]}"; then

View File

@@ -276,4 +276,6 @@ fi
# Start setup gtnh server files
handleGTNH
export USES_MODS=true
exec "$(dirname "$0")/start-setupWorld" "$@"

View File

@@ -14,11 +14,12 @@ if ! SERVER=$(mc-image-helper github download-latest-asset \
fi
: "${SERVER_PORT:=25565}"
cat <<EOF > /data/settings.yml
if [ ! -f /data/settings.yml ]; then
cat <<EOF > /data/settings.yml
#
# NanoLimbo configuration
#
# Server's host address and port. Set ip empty to use public address
bind:
ip: '0.0.0.0'
@@ -157,8 +158,11 @@ traffic:
# Ignored if -1.0
maxPacketBytesRate: 2048.0
EOF
fi
mc-image-helper patch --patch-env-prefix "" /image/nanolimbo-settings-patch.json
export SERVER
export FAMILY=LIMBO
exec "$(dirname "$0")/start-setupMounts" "$@"
exec "$(dirname "$0")/start-setupMounts" "$@"