Compare commits

..

44 Commits

Author SHA1 Message Date
Geoff Bourne 8d6442d772 Fabric downloads are better now 2025-05-12 09:14:45 -05:00
Geoff Bourne 9073b22e84 Lower FETCH_CONNECTION_POOL_MAX_IDLE_TIMEOUT 2025-05-12 08:02:12 -05:00
Geoff Bourne 7bbabbac82 Include CF_PAGE_URL in atm10 example 2025-05-12 07:32:26 -05:00
Geoff Bourne 6b308c628f cf: when "no matching files found" include retrieved filenames in error 2025-05-11 21:06:46 -05:00
Geoff Bourne 5fe65a68c3 Add to global excludes the ones needed for Craftoria (#3440) 2025-05-10 11:25:08 -05:00
XHawk87 89ffb2377a Added Ansible and MASH to deployment docs (#3439) 2025-05-08 12:57:48 -05:00
Kim 8c52b98d91 Add smithing-template-viewer to cf-exclude-include.json (#3438) 2025-05-08 07:32:50 -05:00
Fournet Enzo 9d749ab514 CF: Ignoring particular (#3437) 2025-05-05 13:54:25 -05:00
Geoff Bourne 1c0fe6ff10 Use /data/tmp for WORLD zip preparation (#3322) 2025-05-04 16:49:32 -05:00
Geoff Bourne ae4756f5a7 Change auto_curseforge test to use CF_PAGE_URL (#3431) 2025-04-30 09:45:28 -05:00
Geoff Bourne 6cbedd8c26 Revert (for now) the feature to limit concurrent modpack file downloads (#3430) 2025-04-30 09:21:23 -05:00
Geoff Bourne 62be34bae9 Upgrade mc-image-helper to 1.41.8 (#3429) 2025-04-28 21:21:55 -05:00
dependabot[bot] c0f1a7e1cb build(deps): bump docker/build-push-action from 6.15.0 to 6.16.0 in the updates group (#3428) 2025-04-28 08:26:17 -05:00
dependabot[bot] 06ba3c8c77 build(deps): bump mkdocs-material from 9.6.11 to 9.6.12 in /docs in the patches group (#3425) 2025-04-21 07:26:57 -05:00
Geoff Bourne 0ec908b243 Corrected build entries for Java 24 (#3421) 2025-04-18 21:44:32 -05:00
Geoff Bourne d9615e3558 Add Java 24 image variants (#3420) 2025-04-18 21:35:24 -05:00
dependabot[bot] dcf2f46620 build(deps): bump mkdocs-click from 0.8.1 to 0.9.0 in /docs in the patches group (#3413) 2025-04-16 20:14:59 -05:00
Geoff Bourne 8ba47ea280 deps: upgrade tools to Go 1.24.2 (#3412) 2025-04-13 08:32:45 -05:00
Geoff Bourne 21593d2e43 fabric: accept shared-fetch/netty arguments (#3411) 2025-04-12 13:46:23 -05:00
dependabot[bot] c8a7513322 build(deps): bump mkdocs-material from 9.6.10 to 9.6.11 in /docs in the patches group (#3406) 2025-04-07 07:26:47 -05:00
Tobias 66d0605502 add resources key to docker compose jvm options (#3404) 2025-04-06 22:26:37 -05:00
Geoff Bourne 5fad540c57 Revert "Add support of CF_API_KEY_FILE environment variable" (#3402) 2025-04-05 09:13:18 -05:00
Geoff Bourne 04713222c9 docs: add a note about downloading fabric-api (#3401) 2025-04-05 08:53:06 -05:00
Maxim Liven 483cd3a1d8 Add support of CF_API_KEY_FILE environment variable (#3396) 2025-04-05 08:37:51 -05:00
Geoff Bourne 5b549c0483 build: add image info properties (#3400) 2025-04-04 20:25:19 -05:00
Geoff Bourne c57760e4b4 docs: fix formatting for image labels list (#3399) 2025-04-04 14:57:27 -05:00
Geoff Bourne fd3655be88 docs: added info about image labels (#3398) 2025-04-04 14:51:45 -05:00
Geoff Bourne d6897a649e fabric: retry loader version lookup (#3394) 2025-04-02 21:15:38 -05:00
JairG 9f1a18ef34 fixed logic to not compare the VERSION number when VERSION is set to … (#3389) 2025-04-02 19:38:04 -05:00
Geoff Bourne dedf8bc587 docs: clarify Fabric docs TYPE usage (#3387) 2025-04-01 21:11:34 -05:00
dependabot[bot] abb33d20fb build(deps): bump the patches group in /docs with 2 updates (#3383) 2025-03-31 07:57:42 -05:00
Geoff Bourne 6b4985c38d docs: updated bmc4 example to v34.5 (#3382) 2025-03-30 18:56:44 -05:00
dependabot[bot] 16a7f7ae03 build(deps): bump the patches group in /docs with 2 updates (#3379) 2025-03-24 07:08:23 -05:00
Geoff Bourne 20db1c9eb0 docs: show example of MODRINTH_PROJECTS with version number (#3378) 2025-03-23 20:15:31 -05:00
Geoff Bourne dac388268f Support multiple values for COPY_PLUGINS_SRC, COPY_MODS_SRC, and COPY_CONFIG_SRC (#3377) 2025-03-23 15:43:08 -05:00
Geoff Bourne 231ac0f665 Add Docker logo to badges (#3375) 2025-03-19 20:52:46 -05:00
Geoff Bourne 68a56be107 Fix SKIP_CHOWN_DATA (#3374) 2025-03-19 19:43:26 -05:00
dependabot[bot] ac32c8706f build(deps): bump the updates group across 1 directory with 5 updates (#3369) 2025-03-17 20:27:49 -05:00
Geoff Bourne f5e511e3cc docs: clarify that ICON can be a container path (#3371) 2025-03-17 09:41:21 -05:00
dependabot[bot] 2a859d61f6 build(deps): bump mkdocs-material from 9.6.7 to 9.6.8 in /docs in the patches group (#3370) 2025-03-17 07:36:02 -05:00
dependabot[bot] 943429e180 build(deps): bump the patches group across 1 directory with 3 updates (#3355)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Geoff Bourne <itzgeoff@gmail.com>
2025-03-16 14:23:03 -05:00
Geoff Bourne 7e5f5805a5 Add AUTOPAUSE_STATUS_RETRY_LIMIT and AUTOPAUSE_STATUS_RETRY_INTERVAL (#3365) 2025-03-16 13:25:37 -05:00
joesturge 777f4e26b9 Lazymc - Update misc examples with non-deprecated method of managing lazymc (#3360) 2025-03-15 18:44:23 -05:00
Henry 21f2a7e86c Exclude compass-coords globally from cf and mr, client side mod (#3361) 2025-03-15 10:07:12 -05:00
40 changed files with 364 additions and 165 deletions
+17 -20
View File
@@ -20,8 +20,8 @@ jobs:
matrix: matrix:
# NOTE: the "latest" variant is identified in the Docker meta step's 'latest' config # NOTE: the "latest" variant is identified in the Docker meta step's 'latest' config
variant: variant:
- java23 - java24
- java23-graalvm - java24-graalvm
- java21 - java21
- java21-alpine - java21-alpine
- java21-graalvm - java21-graalvm
@@ -33,15 +33,14 @@ jobs:
- java8-graalvm-ce - java8-graalvm-ce
- java8-openj9 - java8-openj9
- java8-jdk - java8-jdk
- java11
include: include:
# JAVA 23 # JAVA 24
- variant: java23 - variant: java24
baseImage: eclipse-temurin:23-jre baseImage: eclipse-temurin:24-jre
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
mcVersion: latest mcVersion: latest
- variant: java23-graalvm - variant: java24-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:23-ol8 baseImage: container-registry.oracle.com/graalvm/jdk:24-ol8
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
mcVersion: latest mcVersion: latest
# JAVA 21: # JAVA 21:
@@ -75,11 +74,6 @@ jobs:
baseImage: eclipse-temurin:17-jre-alpine baseImage: eclipse-temurin:17-jre-alpine
platforms: linux/amd64 platforms: linux/amd64
mcVersion: 1.20.4 mcVersion: 1.20.4
# JAVA 11:
- variant: java11
baseImage: adoptopenjdk:11-jre-hotspot
platforms: linux/amd64,linux/arm/v7,linux/arm64
mcVersion: 1.16.5
# 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
@@ -111,7 +105,7 @@ jobs:
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5.6.1 uses: docker/metadata-action@v5.7.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.
@@ -139,13 +133,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@v3.9.0 uses: docker/setup-buildx-action@v3.10.0
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3.4.0 uses: docker/setup-qemu-action@v3.6.0
- name: Build for test - name: Build for test
uses: docker/build-push-action@v6.14.0 uses: docker/build-push-action@v6.16.0
with: with:
platforms: linux/amd64 platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }} tags: ${{ env.IMAGE_TO_TEST }}
@@ -168,14 +162,14 @@ jobs:
tests/test.sh tests/test.sh
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v3.3.0 uses: docker/login-action@v3.4.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@v3.3.0 uses: docker/login-action@v3.4.0
if: env.HAS_IMAGE_REPO_ACCESS if: env.HAS_IMAGE_REPO_ACCESS
with: with:
registry: ghcr.io registry: ghcr.io
@@ -183,7 +177,7 @@ jobs:
password: ${{ github.token }} password: ${{ github.token }}
- name: Build and push - name: Build and push
uses: docker/build-push-action@v6.14.0 uses: docker/build-push-action@v6.16.0
if: github.actor == github.repository_owner if: github.actor == github.repository_owner
with: with:
platforms: ${{ matrix.platforms }} platforms: ${{ matrix.platforms }}
@@ -207,5 +201,8 @@ jobs:
build-args: | build-args: |
BASE_IMAGE=${{ matrix.baseImage }} BASE_IMAGE=${{ matrix.baseImage }}
BUILD_FILES_REV=${{ steps.build-files-rev.outputs.REV }} BUILD_FILES_REV=${{ steps.build-files-rev.outputs.REV }}
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
cache-from: type=gha,scope=${{ matrix.variant }} cache-from: type=gha,scope=${{ matrix.variant }}
cache-to: type=gha,mode=max,scope=${{ matrix.variant }} cache-to: type=gha,mode=max,scope=${{ matrix.variant }}
+3 -3
View File
@@ -53,10 +53,10 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Setup Docker Buildx - name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3.9.0 uses: docker/setup-buildx-action@v3.10.0
- name: Confirm multi-arch build - name: Confirm multi-arch build
uses: docker/build-push-action@v6.14.0 uses: docker/build-push-action@v6.16.0
with: with:
platforms: ${{ matrix.platforms }} platforms: ${{ matrix.platforms }}
# ensure latest base image is used # ensure latest base image is used
@@ -66,7 +66,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@v6.14.0 uses: docker/build-push-action@v6.16.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"
+10 -5
View File
@@ -26,11 +26,11 @@ EXPOSE 25565
ARG APPS_REV=1 ARG APPS_REV=1
ARG GITHUB_BASEURL=https://github.com ARG GITHUB_BASEURL=https://github.com
ARG EASY_ADD_VERSION=0.8.9 ARG EASY_ADD_VERSION=0.8.10
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
ARG RESTIFY_VERSION=1.7.7 ARG RESTIFY_VERSION=1.7.9
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
@@ -40,7 +40,7 @@ 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
ARG MC_MONITOR_VERSION=0.15.3 ARG MC_MONITOR_VERSION=0.15.5
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
@@ -50,7 +50,7 @@ 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
ARG MC_HELPER_VERSION=1.41.2 ARG MC_HELPER_VERSION=1.41.10
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
@@ -69,7 +69,7 @@ ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000 LC_ALL=en_US.UTF-8
COPY --chmod=755 scripts/start* / COPY --chmod=755 scripts/start* /
COPY --chmod=755 bin/ /usr/local/bin/ COPY --chmod=755 bin/ /usr/local/bin/
COPY --chmod=755 bin/mc-health /health.sh COPY --chmod=755 bin/mc-health /health.sh
COPY --chmod=644 files/* /image/ COPY --chmod=755 files/* /image/
COPY --chmod=755 files/auto /auto COPY --chmod=755 files/auto /auto
RUN curl -fsSL -o /image/Log4jPatcher.jar https://github.com/CreeperHost/Log4jPatcher/releases/download/v1.0.1/Log4jPatcher-1.0.1.jar RUN curl -fsSL -o /image/Log4jPatcher.jar https://github.com/CreeperHost/Log4jPatcher/releases/download/v1.0.1/Log4jPatcher-1.0.1.jar
@@ -78,3 +78,8 @@ RUN dos2unix /start* /auto/*
ENTRYPOINT [ "/start" ] ENTRYPOINT [ "/start" ]
HEALTHCHECK --start-period=2m --retries=2 --interval=30s CMD mc-health HEALTHCHECK --start-period=2m --retries=2 --interval=30s CMD mc-health
ARG BUILDTIME=local
ARG VERSION=local
ARG REVISION=local
RUN echo "buildtime=${BUILDTIME}\nversion=${VERSION}\nrevision=${REVISION}" > /etc/image.properties
+2 -2
View File
@@ -1,5 +1,5 @@
[![Docker Pulls](https://img.shields.io/docker/pulls/itzg/minecraft-server.svg)](https://hub.docker.com/r/itzg/minecraft-server/) [![Docker Pulls](https://img.shields.io/docker/pulls/itzg/minecraft-server.svg?logo=docker)](https://hub.docker.com/r/itzg/minecraft-server/)
[![Docker Stars](https://img.shields.io/docker/stars/itzg/minecraft-server.svg?maxAge=2592000)](https://hub.docker.com/r/itzg/minecraft-server/) [![Docker Stars](https://img.shields.io/docker/stars/itzg/minecraft-server.svg?logo=docker)](https://hub.docker.com/r/itzg/minecraft-server/)
[![GitHub Issues](https://img.shields.io/github/issues-raw/itzg/docker-minecraft-server.svg)](https://github.com/itzg/docker-minecraft-server/issues) [![GitHub Issues](https://img.shields.io/github/issues-raw/itzg/docker-minecraft-server.svg)](https://github.com/itzg/docker-minecraft-server/issues)
[![Discord](https://img.shields.io/discord/660567679458869252?label=Discord&logo=discord)](https://discord.gg/DXfKpjB) [![Discord](https://img.shields.io/discord/660567679458869252?label=Discord&logo=discord)](https://discord.gg/DXfKpjB)
[![Build and Publish](https://github.com/itzg/docker-minecraft-server/actions/workflows/build-multiarch.yml/badge.svg)](https://github.com/itzg/docker-minecraft-server/actions/workflows/build-multiarch.yml) [![Build and Publish](https://github.com/itzg/docker-minecraft-server/actions/workflows/build-multiarch.yml/badge.svg)](https://github.com/itzg/docker-minecraft-server/actions/workflows/build-multiarch.yml)
+3 -2
View File
@@ -46,8 +46,9 @@ To let the JVM calculate the heap size from the container declared memory limit,
MEMORY: "" MEMORY: ""
JVM_XX_OPTS: "-XX:MaxRAMPercentage=75" JVM_XX_OPTS: "-XX:MaxRAMPercentage=75"
deploy: deploy:
limits: resources:
memory: 4G limits:
memory: 4G
``` ```
!!! important !!! important
+26 -6
View File
@@ -197,14 +197,34 @@ New to [22W42A](https://www.minecraft.net/en-us/article/minecraft-snapshot-22w42
### Server icon ### Server icon
A server icon can be configured using the `ICON` variable. The image will be automatically A server icon can be configured by setting the `ICON` variable to a URL to download or a container path. The image will be automatically downloaded (if a URL), scaled, and converted from any other image format:
downloaded, scaled, and converted from any other image format:
!!! example
Using `docker run`:
```
docker run -d -e ICON=http://..../some/image.png ... docker run -d -e ICON=http://..../some/image.png ...
```
In compose file:
```yaml
environment:
ICON: http://..../some/image.png
```
Using a file from host filesystem:
```yaml
environment:
ICON: /icon.png
OVERRIDE_ICON: true
volumes:
./icon.png:/icon.png
```
The server icon which has been set doesn't get overridden by default. It can be changed and overridden by setting `OVERRIDE_ICON` to `TRUE`. By default an existing `server-icon.png` file will not be replaced, that can be changed by setting `OVERRIDE_ICON` to "true".
docker run -d -e ICON=http://..../some/other/image.png -e OVERRIDE_ICON=TRUE...
### RCON ### RCON
@@ -502,4 +522,4 @@ When using `docker run` from a bash shell, the entries must be quoted with the `
| LOG_IPS | log-ips | | LOG_IPS | log-ips |
| REGION_FILE_COMPRESSION | region-file-compression | | REGION_FILE_COMPRESSION | region-file-compression |
| BUG_REPORT_LINK | bug-report-link | | BUG_REPORT_LINK | bug-report-link |
| PAUSE_WHEN_EMPTY_SECONDS | pause-when-empty-seconds | | PAUSE_WHEN_EMPTY_SECONDS | pause-when-empty-seconds |
@@ -38,6 +38,8 @@ The following environment variables define the behaviour of auto-pausing:
describes period of the daemonized state machine, that handles the pausing of the process (resuming is done independently) describes period of the daemonized state machine, that handles the pausing of the process (resuming is done independently)
- `AUTOPAUSE_KNOCK_INTERFACE`, default `eth0` - `AUTOPAUSE_KNOCK_INTERFACE`, default `eth0`
<br>Describes the interface passed to the `knockd` daemon. If the default interface does not work, run the `ifconfig` command inside the container and derive the interface receiving the incoming connection from its output. The passed interface must exist inside the container. Using the loopback interface (`lo`) does likely not yield the desired results. <br>Describes the interface passed to the `knockd` daemon. If the default interface does not work, run the `ifconfig` command inside the container and derive the interface receiving the incoming connection from its output. The passed interface must exist inside the container. Using the loopback interface (`lo`) does likely not yield the desired results.
- `AUTOPAUSE_STATUS_RETRY_LIMIT`, default 10
- `AUTOPAUSE_STATUS_RETRY_INTERVAL`, default 2s
!!! tip !!! tip
+5 -3
View File
@@ -17,12 +17,14 @@ Enable the Autostop functionality by setting:
``` ```
The following environment variables define the behavior of auto-stopping: The following environment variables define the behavior of auto-stopping:
* `AUTOSTOP_TIMEOUT_EST`, default `3600` (seconds) - `AUTOSTOP_TIMEOUT_EST`, default `3600` (seconds)
describes the time between the last client disconnect and the stopping of the server (read as timeout established) describes the time between the last client disconnect and the stopping of the server (read as timeout established)
* `AUTOSTOP_TIMEOUT_INIT`, default `1800` (seconds) - `AUTOSTOP_TIMEOUT_INIT`, default `1800` (seconds)
describes the time between server start and the stopping of the server, when no client connects in-between (read as timeout initialized) describes the time between server start and the stopping of the server, when no client connects in-between (read as timeout initialized)
* `AUTOSTOP_PERIOD`, default `10` (seconds) - `AUTOSTOP_PERIOD`, default `10` (seconds)
describes period of the daemonized state machine, that handles the stopping of the server describes period of the daemonized state machine, that handles the stopping of the server
- `AUTOPAUSE_STATUS_RETRY_LIMIT`, default 10
- `AUTOPAUSE_STATUS_RETRY_INTERVAL`, default 2s
> To troubleshoot, add `DEBUG_AUTOSTOP=true` to see additional output > To troubleshoot, add `DEBUG_AUTOSTOP=true` to see additional output
+11
View File
@@ -13,6 +13,17 @@
[Shulker](https://github.com/jeremylvln/Shulker) is a Kubernetes operator for managing complex and dynamic Minecraft infrastructures, including game servers and proxies. It uses the docker-minecraft-server and docker-bungeecord images under-the-hood. [Shulker](https://github.com/jeremylvln/Shulker) is a Kubernetes operator for managing complex and dynamic Minecraft infrastructures, including game servers and proxies. It uses the docker-minecraft-server and docker-bungeecord images under-the-hood.
## With Ansible
[Ansible](https://docs.ansible.com/ansible/latest/getting_started/introduction.html) is an open-source task automation tool built in [Python](https://www.python.org/). Ansible playbooks can be used to automate all kinds of tasks, including deploying remote Minecraft servers.
### Using the MASH playbook
[The MASH Playbook](https://github.com/mother-of-all-self-hosting/mash-playbook) is a premade playbook with the option to deploy a [wide variety of open-source services](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/supported-services.md) to your server(s), including [docker-minecraft-server](https://github.com/XHawk87/ansible-role-minecraft), making it a good option if you want all the bells and whistles alongside your Minecraft server.
- Check out the [Installation Guide](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/README.md) for the MASH playbook to get started.
- You can then enable [Minecraft](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/minecraft.md) in your vars.yml.
- Enable any supporting services that you might find useful, such as [user authentication](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/authelia.md), [remote backups](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/backup-borg.md), [email relay](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/exim-relay.md), [cron monitoring](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/healthchecks.md), [audio and video conferencing](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/jitsi.md), databases ([MariaDB](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/mariadb.md), [PostgresSQL](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/postgres.md)), [push notifications](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/ntfy.md), [uptime monitoring](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/uptime-kuma.md), [a website](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/wordpress.md), as well as installing any [extra files, folders, applications, services and running commands](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/auxiliary.md) automatically on deployment.
## On CloudFormation (AWS) ## On CloudFormation (AWS)
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Minecraft Server Deployment (CloudFormation) repository](https://github.com/vatertime/minecraft-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use. If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Minecraft Server Deployment (CloudFormation) repository](https://github.com/vatertime/minecraft-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
+34 -8
View File
@@ -31,15 +31,33 @@ services:
With [lazymc-docker-proxy](https://github.com/joesturge/lazymc-docker-proxy) you are able to use [lazymc](https://github.com/timvisee/lazymc) with the minecraft container. With [lazymc-docker-proxy](https://github.com/joesturge/lazymc-docker-proxy) you are able to use [lazymc](https://github.com/timvisee/lazymc) with the minecraft container.
```yaml ```yaml
# Lazymc requires that the minecraft server have a static IP.
#
# To ensure that our servers have a static IP we need to create
# a network for our services to use.
#
# By default, Docker uses 172.17.0.0/16 subnet range.
# So we need to create a new network in a different subnet
# See the readme for more information.
#
# Please ensure that the subnet falls within the private CIDRs:
# https://datatracker.ietf.org/doc/html/rfc1918#section-3
#
# And that it is not in use by anything else.
networks:
minecraft-network:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
services: services:
lazymc: lazymc:
container_name: lazymc
image: ghcr.io/joesturge/lazymc-docker-proxy:latest image: ghcr.io/joesturge/lazymc-docker-proxy:latest
environment: # the IPs should start at .2 as .1 is reserved for the gateway
# Point to the service name of the Minecraft server networks:
SERVER_ADDRESS: mc:25565 minecraft-network:
# Required to find the container to manage it ipv4_address: 172.18.0.2
LAZYMC_GROUP: mc
restart: unless-stopped restart: unless-stopped
volumes: volumes:
# you should mount the minecraft server dir under /server, using read only. # you should mount the minecraft server dir under /server, using read only.
@@ -54,11 +72,19 @@ services:
# Standard Docker Minecraft server, also works with other server types # Standard Docker Minecraft server, also works with other server types
mc: mc:
image: itzg/minecraft-server:java21 image: itzg/minecraft-server:java21
container_name: minecraft-server # Assign a static IP to the server container
networks:
minecraft-network:
ipv4_address: 172.18.0.3
# We need to add a label here so that lazymc-docker-proxy knows which # We need to add a label here so that lazymc-docker-proxy knows which
# container to manage # container to manage
labels: labels:
# Set lazymc.enabled to true to enable lazymc on this container
- lazymc.enabled=true
# Required to find the container to manage it
- lazymc.group=mc - lazymc.group=mc
# Point to the service name of the Minecraft server
- lazymc.server.address=mc:25565
tty: true tty: true
stdin_open: true stdin_open: true
# This container should be managed solely by the lazymc container # This container should be managed solely by the lazymc container
@@ -113,4 +139,4 @@ services:
stdin_open: true stdin_open: true
restart: unless-stopped restart: unless-stopped
``` ```
[Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/lazytainer/docker-compose.yml) [Source](https://github.com/itzg/docker-minecraft-server/blob/master/examples/lazytainer/docker-compose.yml)
+31
View File
@@ -5,3 +5,34 @@ To troubleshoot just the command-line used to start the Minecraft server, set th
To troubleshoot any issues with memory allocation reported by the JVM, set the environment variable `DEBUG_MEMORY` to `true`. To troubleshoot any issues with memory allocation reported by the JVM, set the environment variable `DEBUG_MEMORY` to `true`.
If you are experiencing any issues with the "Changing ownership of /data" step, that can be disabled by setting `SKIP_CHOWN_DATA` to `true`. If you are experiencing any issues with the "Changing ownership of /data" step, that can be disabled by setting `SKIP_CHOWN_DATA` to `true`.
To confirm the image version that has been pulled, use the following command, replacing `itzg/minecraft-server` as needed for specific image tags:
## Image labels
```shell
docker image inspect itzg/minecraft-server -f "{{json .Config.Labels}}"
```
such as
```json
{
"org.opencontainers.image.authors": "... <...@gmail.com>",
"org.opencontainers.image.created": "2025-04-03T02:15:51.405Z",
"org.opencontainers.image.description": "Docker image that provides a Minecraft Server for Java Edition that automatically downloads selected version at startup",
"org.opencontainers.image.licenses": "Apache-2.0",
"org.opencontainers.image.ref.name": "ubuntu",
"org.opencontainers.image.revision": "d6897a649ecbc16b5fb2e1500e24b64ef80270a0",
"org.opencontainers.image.source": "https://github.com/itzg/docker-minecraft-server",
"org.opencontainers.image.title": "docker-minecraft-server",
"org.opencontainers.image.url": "https://github.com/itzg/docker-minecraft-server",
"org.opencontainers.image.version": "java21"
}
```
The labels that are most interesting are:
- `org.opencontainers.image.created` : the date/time the image was built
- `org.opencontainers.image.revision` : which maps to <https://github.com/itzg/docker-minecraft-server/commit/REVISION>
- `org.opencontainers.image.version` : image tag and variant [as described in this page](../versions/java.md)
+25 -3
View File
@@ -16,7 +16,9 @@ On the left, there are sections describing some download automation options.
## Mods vs Plugins ## Mods vs Plugins
The terms "mods" and "plugins" can be quite confusing. Generally, the rule of thumb is that "mods" are used by the types that run client side to modify rendering, add new blocks, and add behaviors server, such as [Forge](../types-and-platforms/server-types/forge.md) and [Fabric](../types-and-platforms/server-types/fabric.md). "Plugins" are used by the types that **only run on servers** to add behaviors, commands, etc such as [Paper](../types-and-platforms/server-types/paper.md) (which derives from [Bukkit/Spigot](../types-and-platforms/server-types/bukkit-spigot.md)). There are also some types that are [hybrids](../types-and-platforms/server-types/hybrids.md), such as Magma, that use both "mods" and "plugins" The terms "mods" and "plugins" can be quite confusing. Generally, the rule of thumb is that "mods" are used by the types that run client side to modify rendering, add new blocks, and add behaviors server, such as [Forge](../types-and-platforms/server-types/forge.md) and [Fabric](../types-and-platforms/server-types/fabric.md). "Plugins" are used by the types that **only run on servers** to add behaviors, commands, etc such as [Paper](../types-and-platforms/server-types/paper.md) (which derives from [Bukkit/Spigot](../types-and-platforms/server-types/bukkit-spigot.md)). There are also some types that are [hybrids](../types-and-platforms/server-types/hybrids.md), such as Magma, that use both "mods" and "plugins".
Typically, mods needs to be installed in both the client and server; however, there are some cases when only the server needs a mod. Plugins only need to be installed in the server and are never needed in the client.
## Optional plugins, mods, and config attach points ## Optional plugins, mods, and config attach points
@@ -41,8 +43,28 @@ For example: `-e REMOVE_OLD_MODS=TRUE -e REMOVE_OLD_MODS_INCLUDE="*.jar" -e REMO
These paths work well if you want to have a common set of modules in a separate location, but still have multiple worlds with different server requirements in either persistent volumes or a downloadable archive. These paths work well if you want to have a common set of modules in a separate location, but still have multiple worlds with different server requirements in either persistent volumes or a downloadable archive.
!!! information "" !!! information "Multiple source directories"
For more flexibility with mods/plugins preparation, you can declare other directories, files, and URLs to use in [the `MODS` / `PLUGINS` variables](#modsplugins-list).
`COPY_PLUGINS_SRC`, `COPY_MODS_SRC`, `COPY_CONFIG_SRC` can each be set to a comma or newline delimited list of container directories to reference.
For example, in a compose file:
```yaml
environment:
# ...EULA, etc
TYPE: PAPER
# matches up to volumes declared below
COPY_PLUGINS_SRC: /plugins-common,/plugins-local
volumes:
- mc-data:/data
# For example, reference a shared directory used by several projects
- ../plugins-common:/plugins-common:ro
# and add plugins unique to this project
- ./plugins:/plugins-local:ro
```
Alternatively, you can declare other directories along with files and URLs to use in [the `MODS` / `PLUGINS` variables](#modsplugins-list).
## Zip file modpack ## Zip file modpack
+8 -8
View File
@@ -13,14 +13,14 @@
To select a datapack from a Modrinth project, prefix the entry with "datapack:". When running a vanilla server, this is optional since only datapacks will be available for vanilla servers to select. To select a datapack from a Modrinth project, prefix the entry with "datapack:". When running a vanilla server, this is optional since only datapacks will be available for vanilla servers to select.
| Description | Example projects entry | | Description | Example projects entry |
|---------------------------------|----------------------------| |---------------------------------|-------------------------------------------------------|
| Select latest version | `fabric-api` | | Select latest version | `fabric-api` |
| Select specific version | `fabric-api:PbVeub96` | | Select specific version | `fabric-api:bQZpGIz0`<br/>`fabric-api:0.119.2+1.21.4` |
| Select latest beta version | `fabric-api:beta` | | Select latest beta version | `fabric-api:beta` |
| Latest version using project ID | `P7dR8mSH` | | Latest version using project ID | `P7dR8mSH` |
| Latest version of datapack | `datapack:terralith` | | Latest version of datapack | `datapack:terralith` |
| Specific version of datapack | `datapack:terralith:2.5.5` | | Specific version of datapack | `datapack:terralith:2.5.5` |
## Extra options ## Extra options
+5 -5
View File
@@ -1,7 +1,7 @@
mkdocs-material == 9.6.1 mkdocs-material == 9.6.12
mkdocs-autorefs == 1.3.0 mkdocs-autorefs == 1.4.1
mkdocstrings == 0.27.0 mkdocstrings[python] == 0.29.1
mkdocs-literate-nav == 0.6.1 mkdocs-literate-nav == 0.6.2
mdx-gh-links == 0.4 mdx-gh-links == 0.4
mkdocs-click == 0.8.1 mkdocs-click == 0.9.0
mkdocs-static-i18n == 1.3.0 mkdocs-static-i18n == 1.3.0
+47 -13
View File
@@ -1,23 +1,57 @@
Enable [Fabric server](https://fabricmc.net/) mode by adding a `-e TYPE=FABRIC` to your command-line. A [Fabric server](https://fabricmc.net/) can be automatically downloaded, upgraded, and run by setting the environment variable TYPE to "FABRIC"
``` !!! example
docker run -d -v /path/on/host:/data \
-e TYPE=FABRIC \ Using `docker run` command line
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
``` ```
docker run -d -e EULA=TRUE -e TYPE=FABRIC -p 25565:25565 itzg/minecraft-server
```
In a compose file service:
```yaml
environment:
EULA: TRUE
TYPE: FABRIC
```
By default, the container will install the latest [fabric server launcher](https://fabricmc.net/use/server/), using the latest [fabric-loader](https://fabricmc.net/wiki/documentation:fabric_loader) against the minecraft version you have defined with `VERSION` (defaulting to the latest vanilla release of the game). By default, the container will install the latest [fabric server launcher](https://fabricmc.net/use/server/), using the latest [fabric-loader](https://fabricmc.net/wiki/documentation:fabric_loader) against the minecraft version you have defined with `VERSION` (defaulting to the latest vanilla release of the game).
A specific loader or launcher version other than the latest can be requested using `FABRIC_LOADER_VERSION` and `FABRIC_LAUNCHER_VERSION` respectively, such as: A specific loader or launcher version other than the latest can be requested using `FABRIC_LOADER_VERSION` and `FABRIC_LAUNCHER_VERSION` respectively, such as:
``` !!! example "Using launcher and loader versions"
docker run -d -v /path/on/host:/data ... \
-e TYPE=FABRIC \
-e FABRIC_LAUNCHER_VERSION=0.10.2 \
-e FABRIC_LOADER_VERSION=0.13.1
```
!!! note With docker run
```
docker run -d ... \
-e TYPE=FABRIC \
-e FABRIC_LAUNCHER_VERSION=0.10.2 \
-e FABRIC_LOADER_VERSION=0.13.1
```
In a compose file service:
```yaml
environment:
EULA: TRUE
TYPE: FABRIC
FABRIC_LAUNCHER_VERSION: 0.10.2
FABRIC_LOADER_VERSION: 0.13.1
```
!!! note "Fabric API"
As [mentioned on the Fabric download page](https://fabricmc.net/use/installer/), most mods will require the Fabric API mod to be installed. That can be easily done by utilizing [the Modrinth downloads feature](../../mods-and-plugins/modrinth.md), such as adding this to the `environment` of a compose file service:
```yaml
TYPE: FABRIC
MODRINTH_PROJECTS: |
fabric-api
```
!!! note "Alternate launcher"
If you wish to use an alternative launcher you can: If you wish to use an alternative launcher you can:
+24 -21
View File
@@ -10,26 +10,29 @@ or explicitly include the tag, such as
where `<tag>` refers to the first column of this table: where `<tag>` refers to the first column of this table:
| Tag | Java version | Linux | JVM Type | Architecture | | Tag | Java version | Linux | JVM Type | Architecture | Note |
|------------------|--------------|--------|--------------------|---------------------| |------------------|--------------|--------|--------------------|---------------------|------|
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | | latest | 21 | Ubuntu | Hotspot | amd64, arm64 | |
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | | stable | 21 | Ubuntu | Hotspot | amd64, arm64 | |
| java23 | 23 | Ubuntu | Hotspot | amd64, arm64 | | java24 | 24 | Ubuntu | Hotspot | amd64, arm64 | (2) |
| java23-graalvm | 23 | Oracle | Oracle GraalVM[^1] | amd64, arm64 | | java24-graalvm | 24 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (2) |
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | | java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | |
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | | java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
| java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 | | java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 | |
| java21-graalvm | 21 | Oracle | Oracle GraalVM[^1] | amd64, arm64 | | java21-graalvm | 21 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | | java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
| java17-graalvm | 17 | Oracle | Oracle GraalVM[^1] | amd64, arm64 | | java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | |
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | | java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | |
| java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 | | java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | | java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 | |
| java8-jdk | 8 | Ubuntu | Hotspot+JDK | amd64 | | java8-openj9 | 8 | Debian | OpenJ9 | amd64 | |
| java8-openj9 | 8 | Debian | OpenJ9 | amd64 | | java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 | |
| java8-graalvm-ce | 8 | Oracle | GraalVM CE | amd64 |
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 GraalMV images](https://blogs.oracle.com/java/post/new-oracle-graalvm-container-images), which as of JDK 17, are now under the [GraalVM Free License](https://blogs.oracle.com/java/post/graalvm-free-license) incorporating what used to be known as the GraalVM Enterprise.
!!! example "Example using java8" !!! example "Example using java8"
@@ -123,17 +126,17 @@ Forge also doesn't support openj9 JVM implementation.
The following image tags have been deprecated and are no longer receiving updates: The following image tags have been deprecated and are no longer receiving updates:
- java19
- adopt13 - adopt13
- adopt14 - adopt14
- adopt15 - adopt15
- openj9-nightly - openj9-nightly
- multiarch-latest - multiarch-latest
- java11
- java16/java16-openj9 - java16/java16-openj9
- java17-graalvm-ce - java17-graalvm-ce
- java17-openj9 - java17-openj9
- java19
- java20-graalvm, java20, java20-alpine - java20-graalvm, java20, java20-alpine
- java23-*
- java8-multiarch is still built and pushed, but please move to java8 instead - java8-multiarch is still built and pushed, but please move to java8 instead
- java8-alpine - java8-alpine
[^1]: Based on the [Oracle GraalMV images](https://blogs.oracle.com/java/post/new-oracle-graalvm-container-images), which as of JDK 17, are now under the [GraalVM Free License](https://blogs.oracle.com/java/post/graalvm-free-license) incorporating what used to be known as the GraalVM Enterprise.
+4 -2
View File
@@ -14,8 +14,10 @@ services:
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key # Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: all-the-mods-10 CF_SLUG: all-the-mods-10
# Optional: select a specific version/file # Or reference a specific modpack file/version using CF_PAGE_URL, such as this one for 2.47
# CF_FILENAME_MATCHER: "1.17" # CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-10/files/6502777
# Optional: select a specific version/file when using CF_SLUG
# CF_FILENAME_MATCHER: "2.47"
MEMORY: 4G MEMORY: 4G
CF_OVERRIDES_EXCLUSIONS: | CF_OVERRIDES_EXCLUSIONS: |
shaderpacks/** shaderpacks/**
+1
View File
@@ -13,6 +13,7 @@ services:
# More aggressive settings for demo purposes # More aggressive settings for demo purposes
AUTOPAUSE_TIMEOUT_INIT: "30" AUTOPAUSE_TIMEOUT_INIT: "30"
AUTOPAUSE_TIMEOUT_EST: "10" AUTOPAUSE_TIMEOUT_EST: "10"
JVM_DD_OPTS: "disable.watchdog:true"
restart: unless-stopped restart: unless-stopped
volumes: volumes:
@@ -1,20 +1,20 @@
services: services:
mc: mc:
image: itzg/minecraft-server image: itzg/minecraft-server
environment: environment:
EULA: true EULA: true
MODPACK_PLATFORM: MODRINTH MODPACK_PLATFORM: MODRINTH
MODRINTH_MODPACK: https://modrinth.com/modpack/better-mc-forge-bmc4/version/v32.5 # NOTE: v36 doesn't startup correctly
MODRINTH_EXCLUDE_FILES: | MODRINTH_MODPACK: https://modrinth.com/modpack/better-mc-forge-bmc4/version/v34.5
XaeroPlus MODRINTH_OVERRIDES_EXCLUSIONS: |
XaerosWorldMap config/paxi/datapacks/BE_default_endgen_fix*
MODRINTH_OVERRIDES_EXCLUSIONS: | MODRINTH_FORCE_SYNCHRONIZE: true
mods/citresewn-*.jar MEMORY: 4G
**/datapacks/BE_default_endgen_fix* ports:
MODRINTH_FORCE_SYNCHRONIZE: true - "25565:25565"
MEMORY: 4G volumes:
ports: - mc-data:/data
- "25565:25565" # or use a host directory binding
# declare /data volume mapping as desired # - ./data:/data
# volumes: volumes:
# - ./data:/data mc-data:
-13
View File
@@ -16,19 +16,6 @@ services:
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: craftoria CF_SLUG: craftoria
MEMORY: 8G MEMORY: 8G
# TODO: replace with slugs and see if already excluded by cf-exclude-include.json
CF_EXCLUDE_MODS: |
737481
363363
394468
986380
844662
568563
915902
690971
455508
1089803
511319
volumes: volumes:
# Use managed volume by default, but can change to a relative path like # Use managed volume by default, but can change to a relative path like
# ./data:/data # ./data:/data
+4
View File
@@ -7,6 +7,10 @@ services:
# VERSION: 1.21.4 # VERSION: 1.21.4
# FABRIC_INSTALLER_VERSION: 1.0.1 # FABRIC_INSTALLER_VERSION: 1.0.1
# FABRIC_LOADER_VERSION: 0.16.10 # FABRIC_LOADER_VERSION: 0.16.10
# Since Fabric server type only includes the loader, most times
# the fabric-api is required for other mods to function
MODRINTH_PROJECTS: |
fabric-api
ports: ports:
- "25565:25565" - "25565:25565"
volumes: volumes:
+33 -7
View File
@@ -1,12 +1,30 @@
# Lazymc requires that the minecraft server have a static IP.
#
# To ensure that our servers have a static IP we need to create
# a network for our services to use.
#
# By default, Docker uses 172.17.0.0/16 subnet range.
# So we need to create a new network in a different subnet
# See the readme for more information.
#
# Please ensure that the subnet falls within the private CIDRs:
# https://datatracker.ietf.org/doc/html/rfc1918#section-3
#
# And that it is not in use by anything else.
networks:
minecraft-network:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
services: services:
lazymc: lazymc:
container_name: lazymc
image: ghcr.io/joesturge/lazymc-docker-proxy:latest image: ghcr.io/joesturge/lazymc-docker-proxy:latest
environment: # the IPs should start at .2 as .1 is reserved for the gateway
# Point to the service name of the Minecraft server networks:
SERVER_ADDRESS: mc:25565 minecraft-network:
# Required to find the container to manage it ipv4_address: 172.18.0.2
LAZYMC_GROUP: mc
restart: unless-stopped restart: unless-stopped
volumes: volumes:
# you should mount the minecraft server dir under /server, using read only. # you should mount the minecraft server dir under /server, using read only.
@@ -21,11 +39,19 @@ services:
# Standard Docker Minecraft server, also works with other server types # Standard Docker Minecraft server, also works with other server types
mc: mc:
image: itzg/minecraft-server:java21 image: itzg/minecraft-server:java21
container_name: minecraft-server # Assign a static IP to the server container
networks:
minecraft-network:
ipv4_address: 172.18.0.3
# We need to add a label here so that lazymc-docker-proxy knows which # We need to add a label here so that lazymc-docker-proxy knows which
# container to manage # container to manage
labels: labels:
# Set lazymc.enabled to true to enable lazymc on this container
- lazymc.enabled=true
# Required to find the container to manage it
- lazymc.group=mc - lazymc.group=mc
# Point to the service name of the Minecraft server
- lazymc.server.address=mc:25565
tty: true tty: true
stdin_open: true stdin_open: true
# This container should be managed solely by the lazymc container # This container should be managed solely by the lazymc container
@@ -1,16 +1,16 @@
services: services:
mc: mc:
image: itzg/minecraft-server image: itzg/minecraft-server
container_name: paper tty: true
stdin_open: true
environment: environment:
EULA: "true" EULA: "true"
TYPE: PAPER TYPE: PAPER
VIEW_DISTANCE: 10
MEMORY: 2G MEMORY: 2G
ports: ports:
- "25565:25565" - "25565:25565"
volumes: volumes:
- mc-paper:/data - mc-data:/data
restart: unless-stopped restart: unless-stopped
volumes: volumes:
mc-paper: {} mc-data: {}
+12 -1
View File
@@ -25,11 +25,17 @@ use_proxy() {
} }
use_server_list_ping() { use_server_list_ping() {
if [[ "${VERSION^^}" == "LATEST" || "${VERSION^^}" == "SNAPSHOT" ]]; then
# Don't use server-list ping for unknown version
return 1
fi
if versionLessThan 1.7; then if versionLessThan 1.7; then
echo "--use-server-list-ping" echo "--use-server-list-ping"
fi fi
} }
mc_server_listening() { mc_server_listening() {
mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" $(use_server_list_ping) --timeout 10s >&/dev/null mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" $(use_server_list_ping) --timeout 10s >&/dev/null
} }
@@ -37,7 +43,12 @@ mc_server_listening() {
java_clients_connections() { java_clients_connections() {
local connections local connections
if java_running; then if java_running; then
if ! connections=$(mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" $(use_server_list_ping) --show-player-count); then if ! connections=$(mc-monitor status \
--host "${SERVER_HOST:-localhost}" \
--port "$SERVER_PORT" \
--retry-limit "${AUTOPAUSE_STATUS_RETRY_LIMIT:-10}" --retry-interval "${AUTOPAUSE_STATUS_RETRY_INTERVAL:-2s}" \
$(use_proxy) $(use_server_list_ping) \
--show-player-count); then
# consider it a non-zero player count if the ping fails # consider it a non-zero player count if the ping fails
# otherwise a laggy server with players connected could get paused # otherwise a laggy server with players connected could get paused
connections=1 connections=1
+8
View File
@@ -11,6 +11,7 @@
"beehivetooltips", "beehivetooltips",
"better-advancements", "better-advancements",
"better-foliage", "better-foliage",
"better-modlist-neoforge",
"better-placement", "better-placement",
"better-sprinting", "better-sprinting",
"better-third-person", "better-third-person",
@@ -21,9 +22,11 @@
"block-drops-jei-addon", "block-drops-jei-addon",
"blur-forge", "blur-forge",
"cartography", "cartography",
"chattoggle",
"cherished-worlds", "cherished-worlds",
"chunk-animator", "chunk-animator",
"clickable-advancements", "clickable-advancements",
"compass-coords",
"configured", "configured",
"controlling", "controlling",
"craftpresence", "craftpresence",
@@ -43,9 +46,11 @@
"enchantment-descriptions", "enchantment-descriptions",
"enhancedvisuals", "enhancedvisuals",
"entity-collision-fps-fix", "entity-collision-fps-fix",
"entity-model-features",
"entity-texture-features-fabric", "entity-texture-features-fabric",
"entityculling", "entityculling",
"equipment-compare", "equipment-compare",
"euphoria-patches",
"extreme-sound-muffler", "extreme-sound-muffler",
"ezzoom", "ezzoom",
"fading-night-vision", "fading-night-vision",
@@ -90,6 +95,7 @@
"oculus", "oculus",
"oldjavawarning", "oldjavawarning",
"overloaded-armor-bar", "overloaded-armor-bar",
"particular",
"packmenu", "packmenu",
"packmodemenu", "packmodemenu",
"reauth", "reauth",
@@ -104,9 +110,11 @@
"seamless-loading-screen", "seamless-loading-screen",
"seamless-loading-screen-forge", "seamless-loading-screen-forge",
"searchables", "searchables",
"seasonhud",
"shulkerboxviewer", "shulkerboxviewer",
"skin-layers-3d", "skin-layers-3d",
"smart-hud", "smart-hud",
"smithing-template-viewer",
"smooth-font", "smooth-font",
"smoothwater", "smoothwater",
"sodium", "sodium",
+2 -1
View File
@@ -22,6 +22,7 @@
"cherishedworlds", "cherishedworlds",
"citresewn", "citresewn",
"clickadv", "clickadv",
"compass-coords",
"connectedness", "connectedness",
"connector", "connector",
"craftpresence", "craftpresence",
@@ -85,4 +86,4 @@
], ],
"globalForceIncludes": [], "globalForceIncludes": [],
"modpacks": {} "modpacks": {}
} }
+1 -1
View File
@@ -39,7 +39,7 @@ if ! isTrue "${SKIP_SUDO:-false}" && [ "$(id -u)" = 0 ]; then
fi fi
fi fi
if isTrue "${SKIP_CHOWN_DATA}" || [[ $(stat -c "%u" /data) != "$UID" ]]; then if isFalse "${SKIP_CHOWN_DATA}" && [[ $(stat -c "%u" /data) != "$UID" ]]; then
log "Changing ownership of /data to $UID ..." log "Changing ownership of /data to $UID ..."
chown -R ${runAsUser}:${runAsGroup} /data chown -R ${runAsUser}:${runAsGroup} /data
fi fi
+1
View File
@@ -32,6 +32,7 @@ isDebugging && set -x
export HOME=/data export HOME=/data
log "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'" log "Running as uid=$(id -u) gid=$(id -g) with /data as '$(ls -lnd /data)'"
log "Image info: $(paste -d, -s /etc/image.properties)"
if [ ! -e /data/eula.txt ]; then if [ ! -e /data/eula.txt ]; then
if ! isTrue "$EULA"; then if ! isTrue "$EULA"; then
+4 -6
View File
@@ -38,7 +38,7 @@ function mc-image-helper-mounts(){
: "${COPY_PLUGINS_SRC:="/plugins"}" : "${COPY_PLUGINS_SRC:="/plugins"}"
: "${COPY_PLUGINS_DEST:=${PLUGINS_OUT_DIR}}" : "${COPY_PLUGINS_DEST:=${PLUGINS_OUT_DIR}}"
if usesPlugins && [ -d "${COPY_PLUGINS_SRC}" ]; then if usesPlugins; then
mkdir -p "${COPY_PLUGINS_DEST}" mkdir -p "${COPY_PLUGINS_DEST}"
log "Copying any plugins from ${COPY_PLUGINS_SRC} to ${COPY_PLUGINS_DEST}" log "Copying any plugins from ${COPY_PLUGINS_SRC} to ${COPY_PLUGINS_DEST}"
mc-image-helper-mounts "${COPY_PLUGINS_SRC}" "${COPY_PLUGINS_DEST}" mc-image-helper-mounts "${COPY_PLUGINS_SRC}" "${COPY_PLUGINS_DEST}"
@@ -47,7 +47,7 @@ fi
: "${COPY_MODS_SRC:="/mods"}" : "${COPY_MODS_SRC:="/mods"}"
: "${COPY_MODS_DEST:=${MODS_OUT_DIR}}" : "${COPY_MODS_DEST:=${MODS_OUT_DIR}}"
if usesMods && [ -d "${COPY_MODS_SRC}" ]; then if usesMods; then
log "Copying any mods from ${COPY_MODS_SRC} to ${COPY_MODS_DEST}" log "Copying any mods from ${COPY_MODS_SRC} to ${COPY_MODS_DEST}"
mc-image-helper-mounts "${COPY_MODS_SRC}" "${COPY_MODS_DEST}" mc-image-helper-mounts "${COPY_MODS_SRC}" "${COPY_MODS_DEST}"
fi fi
@@ -55,9 +55,7 @@ fi
: "${COPY_CONFIG_SRC:="/config"}" : "${COPY_CONFIG_SRC:="/config"}"
: "${COPY_CONFIG_DEST:="/data/config"}" : "${COPY_CONFIG_DEST:="/data/config"}"
if [ -d "${COPY_CONFIG_SRC}" ]; then log "Copying any configs from ${COPY_CONFIG_SRC} to ${COPY_CONFIG_DEST}"
log "Copying any configs from ${COPY_CONFIG_SRC} to ${COPY_CONFIG_DEST}" mc-image-helper-mounts "${COPY_CONFIG_SRC}" "${COPY_CONFIG_DEST}"
mc-image-helper-mounts "${COPY_CONFIG_SRC}" "${COPY_CONFIG_DEST}"
fi
exec "${SCRIPTS:-/}start-setupServerProperties" "$@" exec "${SCRIPTS:-/}start-setupServerProperties" "$@"
+12 -5
View File
@@ -5,6 +5,9 @@
set -e set -e
isDebugging && set -x isDebugging && set -x
worldDownload=/data/tmp/world.zip
tmpWorldData=/data/tmp/world-data
# support absolute directories # support absolute directories
if [[ "${LEVEL:-world}" =~ ^\/.*$ ]]; then if [[ "${LEVEL:-world}" =~ ^\/.*$ ]]; then
worldDest=${LEVEL} worldDest=${LEVEL}
@@ -26,24 +29,25 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] );
if isURL "$WORLD"; then if isURL "$WORLD"; then
log "Downloading world from $WORLD" log "Downloading world from $WORLD"
if ! get -o /tmp/world.bin "$WORLD"; then mkdir -p /data/tmp
if ! get -o ${worldDownload} "$WORLD"; then
logError "Failed to download world from $WORLD" logError "Failed to download world from $WORLD"
exit 1 exit 1
fi fi
WORLD=/tmp/world.bin WORLD=${worldDownload}
fi fi
if [ -f "$WORLD" ]; then if [ -f "$WORLD" ]; then
log "Extracting world" log "Extracting world"
# Stage contents so that the correct subdirectory can be picked off # Stage contents so that the correct subdirectory can be picked off
mkdir -p /tmp/world-data mkdir -p ${tmpWorldData}
if ! extract "$WORLD" /tmp/world-data; then if ! extract "$WORLD" ${tmpWorldData}; then
logError "Extracting world from $WORLD" logError "Extracting world from $WORLD"
exit 1 exit 1
fi fi
baseDirs=$(find /tmp/world-data -name "level.dat" -exec dirname "{}" \;) baseDirs=$(find ${tmpWorldData} -name "level.dat" -exec dirname "{}" \;)
if ! [[ $baseDirs ]]; then if ! [[ $baseDirs ]]; then
logError "World content is not valid since level.dat could not be found" logError "World content is not valid since level.dat could not be found"
@@ -128,4 +132,7 @@ if [[ "$WORLD" ]] && ( isTrue "${FORCE_WORLD_COPY}" || [ ! -d "$worldDest" ] );
fi fi
fi fi
[[ -f ${worldDownload} ]] && rm ${worldDownload}
[[ -d ${tmpWorldData} ]] && rm -rf ${tmpWorldData}
exec "${SCRIPTS:-/}start-setupDatapack" "$@" exec "${SCRIPTS:-/}start-setupDatapack" "$@"
@@ -6,10 +6,8 @@ services:
SETUP_ONLY: "TRUE" SETUP_ONLY: "TRUE"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: the-pixelmon-modpack CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/the-pixelmon-modpack/files/5954570
CF_FILENAME_MATCHER: "9.1.2" DEBUG: true
# Use the image bundled one to ensure latest is being tested
CF_EXCLUDE_INCLUDE_FILE: /image/cf-exclude-include.json
volumes: volumes:
- ./data:/data - ./data:/data
@@ -6,7 +6,7 @@ services:
EULA: "TRUE" EULA: "TRUE"
SETUP_ONLY: "TRUE" SETUP_ONLY: "TRUE"
TYPE: FABRIC TYPE: FABRIC
VERSION: 1.18.2 VERSION: 1.20.1
# Contains mix of Forge and Fabric mods # Contains mix of Forge and Fabric mods
CURSEFORGE_FILES: | CURSEFORGE_FILES: |
https://www.curseforge.com/minecraft/mc-mods/clumps/files/4153343 https://www.curseforge.com/minecraft/mc-mods/clumps/files/4153343
+1 -1
View File
@@ -1 +1 @@
architectury-api@4.12.94 architectury-api@9.2.14
+1
View File
@@ -47,6 +47,7 @@ setupOnlyMinecraftTest(){
status=PASSED status=PASSED
verify= verify=
if ! logs=$(docker compose run --rm -e SETUP_ONLY=true -e DEBUG="${DEBUG:-false}" mc 2>&1); then if ! logs=$(docker compose run --rm -e SETUP_ONLY=true -e DEBUG="${DEBUG:-false}" mc 2>&1); then
status=FAILED
outputContainerLog "$logs" outputContainerLog "$logs"
result=1 result=1
elif [ -f verify.sh ]; then elif [ -f verify.sh ]; then