mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-06-08 19:49:42 +00:00
Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 151143a141 | |||
| cecf4e8e95 | |||
| 1c30c8c476 | |||
| 802dc47c9c | |||
| a4719f2ba6 | |||
| cbd56fd012 | |||
| 544382d5d6 | |||
| e59cf8ac55 | |||
| 68830d5a9f | |||
| 14356b7662 | |||
| d375400541 | |||
| d5442ddb14 | |||
| f65c7f739c | |||
| 58781c3724 | |||
| 1e8aecd06e | |||
| 21920f3fe7 | |||
| 9352c45d6e | |||
| 3d4555557b | |||
| c95b638faa | |||
| fd823d6040 | |||
| 7656abeaa6 | |||
| a708715a9f | |||
| 5febc1ab5d | |||
| 6878ad6e01 | |||
| 889b607606 | |||
| f3b1d7ee93 | |||
| cdc2c7977e | |||
| 14d0be9430 | |||
| ffbd905ec4 | |||
| b35db38cd3 | |||
| 32696ae457 | |||
| 50155230bd |
@@ -13,6 +13,9 @@ updates:
|
|||||||
- minor
|
- minor
|
||||||
- package-ecosystem: pip
|
- package-ecosystem: pip
|
||||||
directory: "/docs"
|
directory: "/docs"
|
||||||
|
labels:
|
||||||
|
- dependencies
|
||||||
|
- documentation
|
||||||
schedule:
|
schedule:
|
||||||
interval: weekly
|
interval: weekly
|
||||||
groups:
|
groups:
|
||||||
|
|||||||
+16
-12
@@ -75,24 +75,28 @@ jobs:
|
|||||||
baseImage: adoptopenjdk:16-jre-hotspot
|
baseImage: adoptopenjdk:16-jre-hotspot
|
||||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
mcVersion: 1.16.5
|
mcVersion: 1.16.5
|
||||||
|
# Pin version for pre-Java 17
|
||||||
|
mcHelperVersion: 1.51.3-java8
|
||||||
# JAVA 11
|
# JAVA 11
|
||||||
- variant: java11
|
- variant: java11
|
||||||
baseImage: adoptopenjdk:11-jre-hotspot
|
baseImage: adoptopenjdk:11-jre-hotspot
|
||||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
mcVersion: 1.16.4
|
mcVersion: 1.16.4
|
||||||
|
# Pin version for pre-Java 17
|
||||||
|
mcHelperVersion: 1.51.3-java8
|
||||||
# JAVA 8: NOTE: Unable to go past 8u312 because of Forge dependencies
|
# JAVA 8: NOTE: Unable to go past 8u312 because of Forge dependencies
|
||||||
- variant: java8
|
- variant: java8
|
||||||
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
||||||
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
mcVersion: 1.12.2
|
mcVersion: 1.12.2
|
||||||
# Pin version for Java 8
|
# Pin version for Java 8, also be sure to set in verify-pr.yml
|
||||||
mcHelperVersion: 1.51.1
|
mcHelperVersion: 1.51.3-java8
|
||||||
- variant: java8-jdk
|
- variant: java8-jdk
|
||||||
baseImage: eclipse-temurin:8u312-b07-jdk-focal
|
baseImage: eclipse-temurin:8u312-b07-jdk-focal
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
mcVersion: 1.12.2
|
mcVersion: 1.12.2
|
||||||
# Pin version for Java 8
|
# Pin version for Java 8, also be sure to set in verify-pr.yml
|
||||||
mcHelperVersion: 1.51.1
|
mcHelperVersion: 1.51.3-java8
|
||||||
env:
|
env:
|
||||||
IMAGE_TO_TEST: "${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}"
|
IMAGE_TO_TEST: "${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}"
|
||||||
HAS_IMAGE_REPO_ACCESS: ${{ secrets.DOCKER_USER != '' && secrets.DOCKER_PASSWORD != '' }}
|
HAS_IMAGE_REPO_ACCESS: ${{ secrets.DOCKER_USER != '' && secrets.DOCKER_PASSWORD != '' }}
|
||||||
@@ -100,14 +104,14 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6.0.2
|
uses: actions/checkout@v6.0.3
|
||||||
with:
|
with:
|
||||||
# for build-files step
|
# for build-files step
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v6.0.0
|
uses: docker/metadata-action@v6.1.0
|
||||||
with:
|
with:
|
||||||
# NOTE for forks: if your Docker Hub organization doesn't match your Github repo's,
|
# 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.
|
# then the use of ${{ github.repository_owner }} will need to be replaced.
|
||||||
@@ -137,13 +141,13 @@ jobs:
|
|||||||
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
|
org.opencontainers.image.authors=Geoff Bourne <itzgeoff@gmail.com>
|
||||||
|
|
||||||
- name: Setup Docker Buildx
|
- name: Setup Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v4.0.0
|
uses: docker/setup-buildx-action@v4.1.0
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v4.0.0
|
uses: docker/setup-qemu-action@v4.1.0
|
||||||
|
|
||||||
- name: Build for test
|
- name: Build for test
|
||||||
uses: docker/build-push-action@v7.1.0
|
uses: docker/build-push-action@v7.2.0
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
tags: ${{ env.IMAGE_TO_TEST }}
|
tags: ${{ env.IMAGE_TO_TEST }}
|
||||||
@@ -168,14 +172,14 @@ jobs:
|
|||||||
tests/test.sh
|
tests/test.sh
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
uses: docker/login-action@v4.1.0
|
uses: docker/login-action@v4.2.0
|
||||||
if: env.HAS_IMAGE_REPO_ACCESS
|
if: env.HAS_IMAGE_REPO_ACCESS
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USER }}
|
username: ${{ secrets.DOCKER_USER }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Login to GHCR
|
- name: Login to GHCR
|
||||||
uses: docker/login-action@v4.1.0
|
uses: docker/login-action@v4.2.0
|
||||||
if: env.HAS_IMAGE_REPO_ACCESS
|
if: env.HAS_IMAGE_REPO_ACCESS
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
@@ -183,7 +187,7 @@ jobs:
|
|||||||
password: ${{ github.token }}
|
password: ${{ github.token }}
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v7.1.0
|
uses: docker/build-push-action@v7.2.0
|
||||||
if: github.actor == github.repository_owner
|
if: github.actor == github.repository_owner
|
||||||
with:
|
with:
|
||||||
platforms: ${{ matrix.platforms }}
|
platforms: ${{ matrix.platforms }}
|
||||||
|
|||||||
@@ -46,23 +46,23 @@ jobs:
|
|||||||
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
baseImage: eclipse-temurin:8u312-b07-jre-focal
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
mcVersion: 1.12.2
|
mcVersion: 1.12.2
|
||||||
# Pin version for Java 8
|
# Pin version for Java 8, be sure to also set in build.yml
|
||||||
mcHelperVersion: 1.51.1
|
mcHelperVersion: 1.51.3-java8
|
||||||
env:
|
env:
|
||||||
IMAGE_TO_TEST: ${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}
|
IMAGE_TO_TEST: ${{ github.repository_owner }}/minecraft-server:test-${{ matrix.variant }}-${{ github.run_id }}
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6.0.2
|
uses: actions/checkout@v6.0.3
|
||||||
with:
|
with:
|
||||||
# for build-files step
|
# for build-files step
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Docker Buildx
|
- name: Setup Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v4.0.0
|
uses: docker/setup-buildx-action@v4.1.0
|
||||||
|
|
||||||
- name: Confirm multi-arch build
|
- name: Confirm multi-arch build
|
||||||
uses: docker/build-push-action@v7.1.0
|
uses: docker/build-push-action@v7.2.0
|
||||||
with:
|
with:
|
||||||
platforms: ${{ matrix.platforms }}
|
platforms: ${{ matrix.platforms }}
|
||||||
# ensure latest base image is used
|
# ensure latest base image is used
|
||||||
@@ -73,7 +73,7 @@ jobs:
|
|||||||
cache-from: type=gha,scope=${{ matrix.variant }}
|
cache-from: type=gha,scope=${{ matrix.variant }}
|
||||||
|
|
||||||
- name: Build for test
|
- name: Build for test
|
||||||
uses: docker/build-push-action@v7.1.0
|
uses: docker/build-push-action@v7.2.0
|
||||||
with:
|
with:
|
||||||
# Only build single platform since loading multi-arch image into daemon fails with
|
# Only build single platform since loading multi-arch image into daemon fails with
|
||||||
# "docker exporter does not currently support exporting manifest lists"
|
# "docker exporter does not currently support exporting manifest lists"
|
||||||
|
|||||||
+6
-6
@@ -26,36 +26,36 @@ ARG APPS_REV=1
|
|||||||
ARG GITHUB_BASEURL=https://github.com
|
ARG GITHUB_BASEURL=https://github.com
|
||||||
|
|
||||||
# renovate: datasource=github-releases packageName=itzg/easy-add
|
# renovate: datasource=github-releases packageName=itzg/easy-add
|
||||||
ARG EASY_ADD_VERSION=0.8.11
|
ARG EASY_ADD_VERSION=0.8.13
|
||||||
ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
|
||||||
RUN chmod +x /usr/bin/easy-add
|
RUN chmod +x /usr/bin/easy-add
|
||||||
|
|
||||||
# renovate: datasource=github-releases packageName=itzg/restify
|
# renovate: datasource=github-releases packageName=itzg/restify
|
||||||
ARG RESTIFY_VERSION=1.7.13
|
ARG RESTIFY_VERSION=1.7.14
|
||||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
|
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
|
||||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
# renovate: datasource=github-releases packageName=itzg/rcon-cli
|
# renovate: datasource=github-releases packageName=itzg/rcon-cli
|
||||||
ARG RCON_CLI_VERSION=1.7.4
|
ARG RCON_CLI_VERSION=1.7.5
|
||||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
--var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \
|
--var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \
|
||||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
# renovate: datasource=github-releases packageName=itzg/mc-monitor
|
# renovate: datasource=github-releases packageName=itzg/mc-monitor
|
||||||
ARG MC_MONITOR_VERSION=0.16.2
|
ARG MC_MONITOR_VERSION=0.16.6
|
||||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
|
--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
|
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
# renovate: datasource=github-releases packageName=itzg/mc-server-runner
|
# renovate: datasource=github-releases packageName=itzg/mc-server-runner
|
||||||
ARG MC_SERVER_RUNNER_VERSION=1.14.5
|
ARG MC_SERVER_RUNNER_VERSION=1.14.7
|
||||||
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
|
--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
|
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||||
|
|
||||||
# renovate: datasource=github-releases packageName=itzg/mc-image-helper versioning=loose
|
# renovate: datasource=github-releases packageName=itzg/mc-image-helper versioning=loose
|
||||||
ARG MC_HELPER_VERSION=1.57.3
|
ARG MC_HELPER_VERSION=1.60.1
|
||||||
ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
|
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
|
# used for cache busting local copy of mc-image-helper
|
||||||
ARG MC_HELPER_REV=1
|
ARG MC_HELPER_REV=1
|
||||||
|
|||||||
@@ -22,6 +22,12 @@ docker run -d --pull=always \
|
|||||||
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Clean server libraries
|
||||||
|
|
||||||
|
By default, supported server types remove stale server libraries during installation by setting `CLEAN_SERVER_LIBRARIES` to `true`. Set `CLEAN_SERVER_LIBRARIES` to `false` to disable this cleanup if it causes unexpected behavior.
|
||||||
|
|
||||||
|
Currently, library cleanup is supported by `TYPE=PAPER`. Other server jar types are not yet supported.
|
||||||
|
|
||||||
## Running as alternate user/group ID
|
## Running as alternate user/group ID
|
||||||
|
|
||||||
By default, the container will switch to and run the Minecraft server as user ID 1000 and group ID 1000; however, that can be changed by setting the environment variables `UID` and `GID`.
|
By default, the container will switch to and run the Minecraft server as user ID 1000 and group ID 1000; however, that can be changed by setting the environment variables `UID` and `GID`.
|
||||||
|
|||||||
@@ -78,6 +78,12 @@ To produce a multi-line MOTD, embed a newline character as `\n` in the string, s
|
|||||||
-e MOTD="Line one\nLine two"
|
-e MOTD="Line one\nLine two"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
From bash shell
|
||||||
|
|
||||||
|
```
|
||||||
|
-e MOTD=$'Line one\nLine two'
|
||||||
|
```
|
||||||
|
|
||||||
or within a compose file
|
or within a compose file
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|||||||
@@ -156,6 +156,54 @@ Disabling mods within docker compose files:
|
|||||||
mod2.jar
|
mod2.jar
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Loading container configuration from a pack
|
||||||
|
|
||||||
|
A pack can ship its own container configuration so that the server type, version,
|
||||||
|
and other variables travel with the pack rather than being declared by the user.
|
||||||
|
At startup, before `TYPE` is dispatched, the container can load environment
|
||||||
|
variables from a file on disk, a URL, an entry inside an archive, or from the
|
||||||
|
`.env` of each `GENERIC_PACK(S)` entry.
|
||||||
|
|
||||||
|
- `LOAD_ENV_FROM_GENERIC_PACK`: when `true`, each entry in `GENERIC_PACKS` (after
|
||||||
|
`GENERIC_PACKS_PREFIX`/`SUFFIX` expansion) is probed for a top-level `.env`
|
||||||
|
and each one found is sourced in the same order the packs are applied (later
|
||||||
|
packs override earlier ones, matching the layering of the unpack itself). Packs
|
||||||
|
without a `.env` are skipped without error. URLs are downloaded into
|
||||||
|
`/data/packs/` and reused by the regular generic-pack unpack step, so they are
|
||||||
|
not fetched twice.
|
||||||
|
- `LOAD_ENV_FROM_FILE`: container path or URL of a shell-style env file (one
|
||||||
|
`KEY=VALUE` per line). Comments and blank lines are allowed.
|
||||||
|
- `LOAD_ENV_FROM_ARCHIVE`: container path or URL of a zip/tar archive containing
|
||||||
|
an env file. The entry is sourced into the environment.
|
||||||
|
- `LOAD_ENV_FROM_ARCHIVE_ENTRY`: relative path of the env file inside the archive.
|
||||||
|
Defaults to `.env`.
|
||||||
|
|
||||||
|
These can be combined. Load order is: generic packs first, then
|
||||||
|
`LOAD_ENV_FROM_FILE`, then `LOAD_ENV_FROM_ARCHIVE` — later loads override
|
||||||
|
earlier ones, and all of them **override** values passed via `docker run -e` (or
|
||||||
|
compose `environment:`), so the pack's declared values win.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker run -d \
|
||||||
|
-e EULA=TRUE \
|
||||||
|
-e GENERIC_PACK=https://cdn.example.org/my-pack.zip \
|
||||||
|
-e LOAD_ENV_FROM_GENERIC_PACK=true \
|
||||||
|
itzg/minecraft-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Where `my-pack.zip` contains a `.env` at its root such as:
|
||||||
|
|
||||||
|
```env
|
||||||
|
TYPE=FABRIC
|
||||||
|
VERSION=1.21.1
|
||||||
|
FABRIC_LOADER_VERSION=0.16.0
|
||||||
|
```
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
The env file is sourced by `bash`, so any shell syntax it contains will be
|
||||||
|
evaluated. Only point these variables at sources you trust. `EULA` cannot be
|
||||||
|
set this way — it is checked before the env file is loaded.
|
||||||
|
|
||||||
## Mods/plugins list
|
## Mods/plugins list
|
||||||
|
|
||||||
You may also download or copy over individual mods/plugins using the `MODS` or `PLUGINS` environment variables. Both are a comma or newline delimited list of
|
You may also download or copy over individual mods/plugins using the `MODS` or `PLUGINS` environment variables. Both are a comma or newline delimited list of
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
click==8.3.3
|
click==8.4.1
|
||||||
colorama==0.4.6
|
colorama==0.4.6
|
||||||
deepmerge==2.0
|
deepmerge==2.0
|
||||||
ghp-import==2.1.0
|
ghp-import==2.1.0
|
||||||
@@ -14,12 +14,12 @@ mkdocstrings==1.0.4
|
|||||||
mkdocstrings-python==2.0.3
|
mkdocstrings-python==2.0.3
|
||||||
packaging==26.2
|
packaging==26.2
|
||||||
pathspec==1.1.1
|
pathspec==1.1.1
|
||||||
platformdirs==4.9.6
|
platformdirs==4.10.0
|
||||||
Pygments==2.20.0
|
Pygments==2.20.0
|
||||||
pymdown-extensions==10.21.2
|
pymdown-extensions==10.21.3
|
||||||
python-dateutil==2.9.0.post0
|
python-dateutil==2.9.0.post0
|
||||||
PyYAML==6.0.3
|
PyYAML==6.0.3
|
||||||
pyyaml_env_tag==1.1
|
pyyaml_env_tag==1.1
|
||||||
six==1.17.0
|
six==1.17.0
|
||||||
watchdog==6.0.0
|
watchdog==6.0.0
|
||||||
zensical==0.0.40
|
zensical==0.0.43
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ The desired modpack project is specified with the `MODRINTH_MODPACK` environment
|
|||||||
|
|
||||||
- A custom URL of a hosted [mrpack file](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack)
|
- A custom URL of a hosted [mrpack file](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack)
|
||||||
|
|
||||||
- The container path to a local [mrpack file](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack)
|
- The container path to a local [mrpack file](https://support.modrinth.com/en/articles/8802351-modrinth-modpack-format-mrpack). The file name **must have the `.mrpack` extension** in order to be correctly detected as a local file.
|
||||||
|
|
||||||
## Modpack version
|
## Modpack version
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ services:
|
|||||||
VANILLATWEAKS_FILE: /config/vanillatweaks-datapacks.json
|
VANILLATWEAKS_FILE: /config/vanillatweaks-datapacks.json
|
||||||
REMOVE_OLD_VANILLATWEAKS: "TRUE"
|
REMOVE_OLD_VANILLATWEAKS: "TRUE"
|
||||||
volumes:
|
volumes:
|
||||||
- data:/data
|
|
||||||
- ./vanillatweaks-datapacks.json:/config/vanillatweaks-datapacks.json:ro
|
- ./vanillatweaks-datapacks.json:/config/vanillatweaks-datapacks.json:ro
|
||||||
vanillatweaks_sharecode:
|
vanillatweaks_sharecode:
|
||||||
# port is set to 25566 to not conflict with vanillatweaks_file example
|
# port is set to 25566 to not conflict with vanillatweaks_file example
|
||||||
@@ -35,7 +34,6 @@ services:
|
|||||||
VANILLATWEAKS_FILE: /config/vanillatweaks-datapacks.json,/config/vanillatweaks-resourcepacks.json,/config/vanillatweaks-craftingtweaks.json
|
VANILLATWEAKS_FILE: /config/vanillatweaks-datapacks.json,/config/vanillatweaks-resourcepacks.json,/config/vanillatweaks-craftingtweaks.json
|
||||||
REMOVE_OLD_VANILLATWEAKS: "TRUE"
|
REMOVE_OLD_VANILLATWEAKS: "TRUE"
|
||||||
volumes:
|
volumes:
|
||||||
- data:/data
|
|
||||||
- ./vanillatweaks-datapacks.json:/config/vanillatweaks-datapacks.json:ro
|
- ./vanillatweaks-datapacks.json:/config/vanillatweaks-datapacks.json:ro
|
||||||
- ./vanillatweaks-resourcepacks.json:/config/vanillatweaks-resourcepacks.json:ro
|
- ./vanillatweaks-resourcepacks.json:/config/vanillatweaks-resourcepacks.json:ro
|
||||||
- ./vanillatweaks-craftingtweaks.json:/config/vanillatweaks-craftingtweaks.json:ro
|
- ./vanillatweaks-craftingtweaks.json:/config/vanillatweaks-craftingtweaks.json:ro
|
||||||
@@ -82,6 +82,7 @@
|
|||||||
"iceberg",
|
"iceberg",
|
||||||
"ignitioncoil",
|
"ignitioncoil",
|
||||||
"illager-raid-music",
|
"illager-raid-music",
|
||||||
|
"immersive-damage-indicators",
|
||||||
"inmisaddon",
|
"inmisaddon",
|
||||||
"iris-flywheel-compat",
|
"iris-flywheel-compat",
|
||||||
"irisshaders",
|
"irisshaders",
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
"gpumemleakfix",
|
"gpumemleakfix",
|
||||||
"Highlighter",
|
"Highlighter",
|
||||||
"ImmediatelyFast",
|
"ImmediatelyFast",
|
||||||
|
"immersivedamageindicators",
|
||||||
"indium",
|
"indium",
|
||||||
"inventory-profiles-next",
|
"inventory-profiles-next",
|
||||||
"iris",
|
"iris",
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
"max-players": {"env": "MAX_PLAYERS"},
|
"max-players": {"env": "MAX_PLAYERS"},
|
||||||
"max-tick-time": {"env": "MAX_TICK_TIME"},
|
"max-tick-time": {"env": "MAX_TICK_TIME"},
|
||||||
"max-world-size": {"env": "MAX_WORLD_SIZE"},
|
"max-world-size": {"env": "MAX_WORLD_SIZE"},
|
||||||
"motd": {"env": "MOTD"},
|
"motd": {"env": "MOTD", "translateLiteralNewlines": true},
|
||||||
"network-compression-threshold": {"env": "NETWORK_COMPRESSION_THRESHOLD"},
|
"network-compression-threshold": {"env": "NETWORK_COMPRESSION_THRESHOLD"},
|
||||||
"online-mode": {"env": "ONLINE_MODE"},
|
"online-mode": {"env": "ONLINE_MODE"},
|
||||||
"op-permission-level": {"env": "OP_PERMISSION_LEVEL"},
|
"op-permission-level": {"env": "OP_PERMISSION_LEVEL"},
|
||||||
|
|||||||
@@ -123,7 +123,8 @@ function addToProxyArgs() {
|
|||||||
addToProxyArgs http.proxyHost "${PROXY_HOST:-}"
|
addToProxyArgs http.proxyHost "${PROXY_HOST:-}"
|
||||||
addToProxyArgs http.proxyPort "${PROXY_PORT:-}"
|
addToProxyArgs http.proxyPort "${PROXY_PORT:-}"
|
||||||
addToProxyArgs http.nonProxyHosts "${PROXY_NON_PROXY_HOSTS:-}"
|
addToProxyArgs http.nonProxyHosts "${PROXY_NON_PROXY_HOSTS:-}"
|
||||||
export MC_IMAGE_HELPER_OPTS+=" ${proxyArgs[*]}"
|
LOCAL_IFS=$IFS; IFS=' '; MC_IMAGE_HELPER_OPTS+=" ${proxyArgs[*]}"; IFS=$LOCAL_IFS
|
||||||
|
export MC_IMAGE_HELPER_OPTS
|
||||||
|
|
||||||
function fixJavaPath() {
|
function fixJavaPath() {
|
||||||
# Some Docker management UIs grab all the image declared variables and present them for configuration.
|
# Some Docker management UIs grab all the image declared variables and present them for configuration.
|
||||||
@@ -152,6 +153,31 @@ fi
|
|||||||
|
|
||||||
cd /data || exit 1
|
cd /data || exit 1
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# Optionally load environment variables from a file or archive entry,
|
||||||
|
# allowing packs/artifacts to declare TYPE, VERSION and other settings
|
||||||
|
# inside-out. Loaded values override anything passed in through docker -e.
|
||||||
|
# Generic packs are processed first so that LOAD_ENV_FROM_FILE and
|
||||||
|
# LOAD_ENV_FROM_ARCHIVE can override any values they set.
|
||||||
|
|
||||||
|
if isTrue "${LOAD_ENV_FROM_GENERIC_PACK:-false}"; then
|
||||||
|
if ! loadEnvFromGenericPack; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${LOAD_ENV_FROM_FILE:-} ]]; then
|
||||||
|
if ! loadEnvFromFile "${LOAD_ENV_FROM_FILE}"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${LOAD_ENV_FROM_ARCHIVE:-} ]]; then
|
||||||
|
if ! loadEnvFromArchive "${LOAD_ENV_FROM_ARCHIVE}" "${LOAD_ENV_FROM_ARCHIVE_ENTRY:-.env}"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
export DECLARED_TYPE=${TYPE^^}
|
export DECLARED_TYPE=${TYPE^^}
|
||||||
export DECLARED_VERSION="$VERSION"
|
export DECLARED_VERSION="$VERSION"
|
||||||
|
|
||||||
|
|||||||
@@ -11,17 +11,26 @@ handleDebugMode
|
|||||||
: "${PAPER_DOWNLOAD_URL:=}"
|
: "${PAPER_DOWNLOAD_URL:=}"
|
||||||
: "${PAPER_CUSTOM_JAR:=}"
|
: "${PAPER_CUSTOM_JAR:=}"
|
||||||
: "${PAPER_CONFIG_DEFAULTS_REPO:=${PAPER_CONFIG_REPO:=https://raw.githubusercontent.com/Shonz1/minecraft-default-configs/main}}"
|
: "${PAPER_CONFIG_DEFAULTS_REPO:=${PAPER_CONFIG_REPO:=https://raw.githubusercontent.com/Shonz1/minecraft-default-configs/main}}"
|
||||||
|
: "${CLEAN_SERVER_LIBRARIES:=true}"
|
||||||
|
|
||||||
resultsFile=/data/.paper.env
|
resultsFile=/data/.paper.env
|
||||||
if [[ $PAPER_CUSTOM_JAR ]]; then
|
if [[ $PAPER_CUSTOM_JAR ]]; then
|
||||||
export SERVER="$PAPER_CUSTOM_JAR"
|
export SERVER="$PAPER_CUSTOM_JAR"
|
||||||
elif [[ $PAPER_DOWNLOAD_URL ]]; then
|
elif [[ $PAPER_DOWNLOAD_URL ]]; then
|
||||||
if ! mc-image-helper install-paper \
|
|
||||||
--output-directory=/data \
|
args=(
|
||||||
--results-file="$resultsFile" \
|
--output-directory=/data
|
||||||
--url="$PAPER_DOWNLOAD_URL"; then
|
--results-file="$resultsFile"
|
||||||
logError "Failed to download from custom PaperMC URL"
|
--url="$PAPER_DOWNLOAD_URL"
|
||||||
exit 1
|
)
|
||||||
|
|
||||||
|
if [[ $CLEAN_SERVER_LIBRARIES ]]; then
|
||||||
|
args+=(--clean-libraries)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! mc-image-helper install-paper "${args[@]}"; then
|
||||||
|
logError "Failed to download from custom PaperMC URL"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
applyResultsFile ${resultsFile}
|
applyResultsFile ${resultsFile}
|
||||||
else
|
else
|
||||||
@@ -35,6 +44,11 @@ else
|
|||||||
if [[ $PAPER_BUILD ]]; then
|
if [[ $PAPER_BUILD ]]; then
|
||||||
args+=(--build="$PAPER_BUILD")
|
args+=(--build="$PAPER_BUILD")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $CLEAN_SERVER_LIBRARIES ]]; then
|
||||||
|
args+=(--clean-libraries)
|
||||||
|
fi
|
||||||
|
|
||||||
if ! mc-image-helper install-paper "${args[@]}"; then
|
if ! mc-image-helper install-paper "${args[@]}"; then
|
||||||
logError "Failed to download $PAPER_PROJECT"
|
logError "Failed to download $PAPER_PROJECT"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
+116
-3
@@ -26,6 +26,117 @@ function applyResultsFile() {
|
|||||||
set +a
|
set +a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadEnvFromFile() {
|
||||||
|
local source=${1?Missing required source argument}
|
||||||
|
local downloaded=
|
||||||
|
|
||||||
|
if isURL "$source"; then
|
||||||
|
mkdir -p /data/.tmp
|
||||||
|
downloaded=$(mktemp -p /data/.tmp)
|
||||||
|
log "Downloading env file from $source"
|
||||||
|
if ! get -o "$downloaded" "$source"; then
|
||||||
|
logError "Failed to download env file from $source"
|
||||||
|
rm -f "$downloaded"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
log "Loading env vars from $source"
|
||||||
|
applyResultsFile "$downloaded"
|
||||||
|
rm -f "$downloaded"
|
||||||
|
elif [ -f "$source" ]; then
|
||||||
|
log "Loading env vars from $source"
|
||||||
|
applyResultsFile "$source"
|
||||||
|
else
|
||||||
|
logError "Env file not found: $source"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadEnvFromArchive() {
|
||||||
|
local source=${1?Missing required source argument}
|
||||||
|
local entry=${2:-.env}
|
||||||
|
local archive=
|
||||||
|
local downloaded=
|
||||||
|
local tmpdir
|
||||||
|
local rc=0
|
||||||
|
|
||||||
|
mkdir -p /data/.tmp
|
||||||
|
|
||||||
|
if isURL "$source"; then
|
||||||
|
downloaded=$(mktemp -p /data/.tmp)
|
||||||
|
log "Downloading archive from $source"
|
||||||
|
if ! get -o "$downloaded" "$source"; then
|
||||||
|
logError "Failed to download archive from $source"
|
||||||
|
rm -f "$downloaded"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
archive=$downloaded
|
||||||
|
elif [ -f "$source" ]; then
|
||||||
|
archive=$source
|
||||||
|
else
|
||||||
|
logError "Archive not found: $source"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmpdir=$(mktemp -d -p /data/.tmp)
|
||||||
|
if extract "$archive" "$tmpdir" "$entry" && [ -f "$tmpdir/$entry" ]; then
|
||||||
|
log "Loading env vars from '$entry' in $source"
|
||||||
|
applyResultsFile "$tmpdir/$entry"
|
||||||
|
else
|
||||||
|
logError "Failed to load env entry '$entry' from $source"
|
||||||
|
rc=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "$tmpdir"
|
||||||
|
[[ -n "$downloaded" ]] && rm -f "$downloaded"
|
||||||
|
return $rc
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadEnvFromGenericPack() {
|
||||||
|
: "${GENERIC_PACKS:=${GENERIC_PACK:-}}"
|
||||||
|
: "${GENERIC_PACKS_PREFIX:=}"
|
||||||
|
: "${GENERIC_PACKS_SUFFIX:=}"
|
||||||
|
|
||||||
|
if [[ -z "${GENERIC_PACKS}" ]]; then
|
||||||
|
logWarning "LOAD_ENV_FROM_GENERIC_PACK is set but GENERIC_PACK(S) is empty"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p /data/.tmp
|
||||||
|
IFS=',' read -ra packs <<< "${GENERIC_PACKS}"
|
||||||
|
local loaded=0
|
||||||
|
local pack packEntry packFile tmpdir
|
||||||
|
for packEntry in "${packs[@]}"; do
|
||||||
|
pack="${GENERIC_PACKS_PREFIX}${packEntry}${GENERIC_PACKS_SUFFIX}"
|
||||||
|
if isURL "$pack"; then
|
||||||
|
mkdir -p /data/packs
|
||||||
|
if ! packFile=$(get -o /data/packs --output-filename --skip-up-to-date "$pack"); then
|
||||||
|
logError "Failed to download generic pack $pack"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
packFile=$pack
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$packFile" ]]; then
|
||||||
|
logError "Generic pack not found: $packFile"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmpdir=$(mktemp -d -p /data/.tmp)
|
||||||
|
# Packs without a .env are valid — silently skip; the unpack step still applies them.
|
||||||
|
if extract "$packFile" "$tmpdir" .env 2>/dev/null && [ -f "$tmpdir/.env" ]; then
|
||||||
|
log "Loading env vars from .env in $pack"
|
||||||
|
applyResultsFile "$tmpdir/.env"
|
||||||
|
loaded=$((loaded + 1))
|
||||||
|
fi
|
||||||
|
rm -rf "$tmpdir"
|
||||||
|
done
|
||||||
|
|
||||||
|
if (( loaded == 0 )); then
|
||||||
|
logWarning "LOAD_ENV_FROM_GENERIC_PACK is set but no pack in GENERIC_PACK(S) contained a .env"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function join_by() {
|
function join_by() {
|
||||||
local d=$1
|
local d=$1
|
||||||
shift
|
shift
|
||||||
@@ -445,17 +556,19 @@ function isType() {
|
|||||||
function extract() {
|
function extract() {
|
||||||
src=${1?}
|
src=${1?}
|
||||||
destDir=${2?}
|
destDir=${2?}
|
||||||
|
shift 2
|
||||||
|
# remaining args are paths within the archive to extract; if none, extract everything
|
||||||
|
|
||||||
type=$(file -b --mime-type "${src}")
|
type=$(file -b --mime-type "${src}")
|
||||||
case "${type}" in
|
case "${type}" in
|
||||||
application/zip)
|
application/zip)
|
||||||
unzip -o -q -d "${destDir}" "${src}"
|
unzip -o -q -d "${destDir}" "${src}" "$@"
|
||||||
;;
|
;;
|
||||||
application/x-tar | application/gzip | application/x-gzip | application/x-bzip2)
|
application/x-tar | application/gzip | application/x-gzip | application/x-bzip2)
|
||||||
tar -C "${destDir}" -xf "${src}"
|
tar -C "${destDir}" -xf "${src}" "$@"
|
||||||
;;
|
;;
|
||||||
application/zstd | application/x-zstd)
|
application/zstd | application/x-zstd)
|
||||||
tar -C "${destDir}" --use-compress-program=unzstd -xf "${src}"
|
tar -C "${destDir}" --use-compress-program=unzstd -xf "${src}" "$@"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
logError "Unsupported archive type: $type"
|
logError "Unsupported archive type: $type"
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
services:
|
||||||
|
mc:
|
||||||
|
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||||
|
environment:
|
||||||
|
EULA: "true"
|
||||||
|
SETUP_ONLY: "true"
|
||||||
|
LOAD_ENV_FROM_ARCHIVE: /test/load-env.zip
|
||||||
|
MOTD: from-compose
|
||||||
|
LOG_TIMESTAMP: "true"
|
||||||
|
DEBUG: "true"
|
||||||
|
# the following are only used to speed up test execution
|
||||||
|
TYPE: CUSTOM
|
||||||
|
CUSTOM_SERVER: /servers/fake.jar
|
||||||
|
VERSION: 1.18.1
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
- ./load-env.zip:/test/load-env.zip
|
||||||
|
- ./fake.jar:/servers/fake.jar
|
||||||
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
mc-image-helper assert propertyEquals --file=server.properties --property=motd --expect=from-archive
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
services:
|
||||||
|
mc:
|
||||||
|
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||||
|
environment:
|
||||||
|
EULA: "true"
|
||||||
|
SETUP_ONLY: "true"
|
||||||
|
LOAD_ENV_FROM_FILE: /test/load-env.env
|
||||||
|
MOTD: from-compose
|
||||||
|
LOG_TIMESTAMP: "true"
|
||||||
|
DEBUG: "true"
|
||||||
|
# the following are only used to speed up test execution
|
||||||
|
TYPE: CUSTOM
|
||||||
|
CUSTOM_SERVER: /servers/fake.jar
|
||||||
|
VERSION: 1.18.1
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
- ./load-env.env:/test/load-env.env
|
||||||
|
- ./fake.jar:/servers/fake.jar
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Loaded by LOAD_ENV_FROM_FILE during start-configuration
|
||||||
|
MOTD=from-env-file
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
mc-image-helper assert propertyEquals --file=server.properties --property=motd --expect=from-env-file
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
services:
|
||||||
|
mc:
|
||||||
|
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
|
||||||
|
environment:
|
||||||
|
EULA: "true"
|
||||||
|
SETUP_ONLY: "true"
|
||||||
|
GENERIC_PACK: /packs/pack.zip
|
||||||
|
LOAD_ENV_FROM_GENERIC_PACK: "true"
|
||||||
|
MOTD: from-compose
|
||||||
|
LOG_TIMESTAMP: "true"
|
||||||
|
DEBUG: "true"
|
||||||
|
# the following are only used to speed up test execution
|
||||||
|
TYPE: CUSTOM
|
||||||
|
CUSTOM_SERVER: /servers/fake.jar
|
||||||
|
VERSION: 1.18.1
|
||||||
|
volumes:
|
||||||
|
- ./data:/data
|
||||||
|
- ./pack.zip:/packs/pack.zip
|
||||||
|
- ./fake.jar:/servers/fake.jar
|
||||||
Binary file not shown.
@@ -0,0 +1,2 @@
|
|||||||
|
mc-image-helper assert propertyEquals --file=server.properties --property=motd --expect=from-generic-pack
|
||||||
|
mc-image-helper assert fileExists config/dummy.yml
|
||||||
Reference in New Issue
Block a user