mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-19 07:46:23 +00:00
Compare commits
13 Commits
build/full
...
2025.12.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55bc4fd329 | ||
|
|
d7d3cc50a0 | ||
|
|
d1535c1eeb | ||
|
|
aadf1a8b9f | ||
|
|
cdbcf41bfc | ||
|
|
548bea7786 | ||
|
|
06836b941a | ||
|
|
53fcaabdf7 | ||
|
|
7922797744 | ||
|
|
afaa4c89a1 | ||
|
|
43a7e9a36c | ||
|
|
ac46484072 | ||
|
|
c26119b512 |
15
.github/workflows/auto-release.yml
vendored
Normal file
15
.github/workflows/auto-release.yml
vendored
Normal 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 }}'
|
||||
|
||||
21
.github/workflows/build-multiarch.yml
vendored
21
.github/workflows/build-multiarch.yml
vendored
@@ -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.
|
||||
|
||||
2
.github/workflows/verify-pr.yml
vendored
2
.github/workflows/verify-pr.yml
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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`.
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
81
docs/sending-commands/websocket.md
Normal file
81
docs/sending-commands/websocket.md
Normal 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;
|
||||
```
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
12
files/nanolimbo-settings-patch.json
Normal file
12
files/nanolimbo-settings-patch.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"file": "/data/settings.yml",
|
||||
"ops": [
|
||||
{
|
||||
"$set": {
|
||||
"path": "$.bind.port",
|
||||
"value": "${SERVER_PORT}",
|
||||
"value-type": "int"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -97,7 +97,8 @@
|
||||
"java": "17",
|
||||
"distribution": "alpine",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"deprecated": true
|
||||
},
|
||||
{
|
||||
"tag": "java17-graalvm",
|
||||
|
||||
@@ -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 © itzg 2024.
|
||||
copyright: Copyright © itzg 2025.
|
||||
plugins:
|
||||
- search
|
||||
- autorefs
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -276,4 +276,6 @@ fi
|
||||
# Start setup gtnh server files
|
||||
handleGTNH
|
||||
|
||||
export USES_MODS=true
|
||||
|
||||
exec "$(dirname "$0")/start-setupWorld" "$@"
|
||||
@@ -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" "$@"
|
||||
Reference in New Issue
Block a user