Compare commits

..

1 Commits

Author SHA1 Message Date
Geoff Bourne
855b664e47 Fixed file format list formatting interpolating.md 2025-01-20 08:42:00 -06:00
72 changed files with 243 additions and 615 deletions

View File

@@ -20,12 +20,10 @@ 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:
- java24
- java24-graalvm
- java21
- java21-alpine
- java21-graalvm - java21-graalvm
- java21
- java21-jdk - java21-jdk
- java21-alpine
- java17 - java17
- java17-graalvm - java17-graalvm
- java17-alpine - java17-alpine
@@ -33,16 +31,8 @@ jobs:
- java8-graalvm-ce - java8-graalvm-ce
- java8-openj9 - java8-openj9
- java8-jdk - java8-jdk
- java11
include: include:
# JAVA 24
- variant: java24
baseImage: eclipse-temurin:24-jre
platforms: linux/amd64,linux/arm64
mcVersion: latest
- variant: java24-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:24-ol8
platforms: linux/amd64,linux/arm64
mcVersion: latest
# JAVA 21: # JAVA 21:
- variant: java21-graalvm - variant: java21-graalvm
baseImage: container-registry.oracle.com/graalvm/jdk:21-ol8 baseImage: container-registry.oracle.com/graalvm/jdk:21-ol8
@@ -74,6 +64,11 @@ 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
@@ -105,7 +100,7 @@ jobs:
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5.7.0 uses: docker/metadata-action@v5.6.1
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.
@@ -133,13 +128,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.10.0 uses: docker/setup-buildx-action@v3.8.0
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3.6.0 uses: docker/setup-qemu-action@v3.3.0
- name: Build for test - name: Build for test
uses: docker/build-push-action@v6.16.0 uses: docker/build-push-action@v6.12.0
with: with:
platforms: linux/amd64 platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }} tags: ${{ env.IMAGE_TO_TEST }}
@@ -162,14 +157,14 @@ jobs:
tests/test.sh tests/test.sh
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v3.4.0 uses: docker/login-action@v3.3.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.4.0 uses: docker/login-action@v3.3.0
if: env.HAS_IMAGE_REPO_ACCESS if: env.HAS_IMAGE_REPO_ACCESS
with: with:
registry: ghcr.io registry: ghcr.io
@@ -177,7 +172,7 @@ jobs:
password: ${{ github.token }} password: ${{ github.token }}
- name: Build and push - name: Build and push
uses: docker/build-push-action@v6.16.0 uses: docker/build-push-action@v6.12.0
if: github.actor == github.repository_owner if: github.actor == github.repository_owner
with: with:
platforms: ${{ matrix.platforms }} platforms: ${{ matrix.platforms }}
@@ -201,8 +196,5 @@ 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 }}

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.10.0 uses: docker/setup-buildx-action@v3.8.0
- name: Confirm multi-arch build - name: Confirm multi-arch build
uses: docker/build-push-action@v6.16.0 uses: docker/build-push-action@v6.12.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.16.0 uses: docker/build-push-action@v6.12.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"

View File

@@ -26,31 +26,31 @@ 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.10 ARG EASY_ADD_VERSION=0.8.8
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.9 ARG RESTIFY_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=${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
ARG RCON_CLI_VERSION=1.7.0 ARG RCON_CLI_VERSION=1.6.9
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
ARG MC_MONITOR_VERSION=0.15.5 ARG MC_MONITOR_VERSION=0.15.0
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
ARG MC_SERVER_RUNNER_VERSION=1.12.6 ARG MC_SERVER_RUNNER_VERSION=1.12.3
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
ARG MC_HELPER_VERSION=1.41.9 ARG MC_HELPER_VERSION=1.40.11
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
@@ -78,8 +78,3 @@ 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

View File

@@ -1,5 +1,5 @@
[![Docker Pulls](https://img.shields.io/docker/pulls/itzg/minecraft-server.svg?logo=docker)](https://hub.docker.com/r/itzg/minecraft-server/) [![Docker Pulls](https://img.shields.io/docker/pulls/itzg/minecraft-server.svg)](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/) [![Docker Stars](https://img.shields.io/docker/stars/itzg/minecraft-server.svg?maxAge=2592000)](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)

View File

@@ -4,10 +4,14 @@ title: Modifying config files
## Replacing variables inside configs ## Replacing variables inside configs
Sometimes you have mods or plugins that require configuration information that is only available at deploy-time. For example if you need to configure a plugin to connect to a database, you don't want to include this information in your Git repository or Docker image. Sometimes you have mods or plugins that require configuration information that is only available at runtime.
Or maybe you have some runtime information like the server name that needs to be set in your config files after the container starts. For example if you need to configure a plugin to connect to a database,
you don't want to include this information in your Git repository or Docker image.
Or maybe you have some runtime information like the server name that needs to be set
in your config files after the container starts.
For those cases there is the option to replace defined variables inside your configs with environment variables defined at container runtime. For those cases there is the option to replace defined variables inside your configs
with environment variables defined at container runtime.
When the environment variable `REPLACE_ENV_IN_PLACE` is set to `true` (the default), the startup script will go through all files inside the container's `/data` path and replace variables that match the container's environment variables. Variables can instead (or in addition to) be replaced in files sync'ed from `/plugins`, `/mods`, and `/config` by setting `REPLACE_ENV_DURING_SYNC` to `true` (defaults to `false`). When the environment variable `REPLACE_ENV_IN_PLACE` is set to `true` (the default), the startup script will go through all files inside the container's `/data` path and replace variables that match the container's environment variables. Variables can instead (or in addition to) be replaced in files sync'ed from `/plugins`, `/mods`, and `/config` by setting `REPLACE_ENV_DURING_SYNC` to `true` (defaults to `false`).
@@ -135,6 +139,7 @@ The following example shows a patch-set file where various fields in the `paper.
``` ```
Supports the file formats: Supports the file formats:
- JSON - JSON
- JSON5 - JSON5
- Yaml - Yaml

View File

@@ -46,9 +46,8 @@ 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:
resources: limits:
limits: memory: 4G
memory: 4G
``` ```
!!! important !!! important

View File

@@ -55,16 +55,6 @@ To allow time for players to finish what they're doing during a graceful server
The grace period can be increased using [the -t option on docker-compose down](https://docs.docker.com/compose/reference/down/) or set the [stop_grace_period](https://docs.docker.com/compose/compose-file/05-services/#stop_grace_period) in the compose file. The grace period can be increased using [the -t option on docker-compose down](https://docs.docker.com/compose/reference/down/) or set the [stop_grace_period](https://docs.docker.com/compose/compose-file/05-services/#stop_grace_period) in the compose file.
The `STOP_SERVER_ANNOUNCE_DELAY` can be bypassed by sending a `SIGUSR1` signal to the `mc-server-runner` process.
`docker`:
docker stop --signal SIGUSR1 mc
`docker compose`:
docker compose kill --signal SIGUSR1
## Configuration Options for Minecraft Server Health Monitoring ## Configuration Options for Minecraft Server Health Monitoring
The image tags include specific variables to simplify configuration for monitoring the health of a Minecraft server: The image tags include specific variables to simplify configuration for monitoring the health of a Minecraft server:

View File

@@ -197,34 +197,14 @@ New to [22W42A](https://www.minecraft.net/en-us/article/minecraft-snapshot-22w42
### Server icon ### Server icon
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: A server icon can be configured using the `ICON` variable. The image will be automatically
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: 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`.
```yaml docker run -d -e ICON=http://..../some/other/image.png -e OVERRIDE_ICON=TRUE...
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
```
By default an existing `server-icon.png` file will not be replaced, that can be changed by setting `OVERRIDE_ICON` to "true".
### RCON ### RCON

View File

@@ -58,9 +58,6 @@ To apply changes made to the compose file, just run `docker compose up -d` again
Follow the logs of the container using `docker compose logs -f`, check on the status with `docker compose ps`, and stop the container using `docker compose stop`. Follow the logs of the container using `docker compose logs -f`, check on the status with `docker compose ps`, and stop the container using `docker compose stop`.
!!! note "Configurator Tool"
If you prefer to use an interactive tool to create or edit a Docker Compose file for this image, you can check out [setupmc.com's configurator](https://setupmc.com/java-server/). It provides a form that supports most of the image variables and generates the `compose.yml` file in real time.
!!! note "More Compose Examples" !!! note "More Compose Examples"
There are more [examples located in the Github repo](https://github.com/itzg/docker-minecraft-server/tree/master/examples). There are more [examples located in the Github repo](https://github.com/itzg/docker-minecraft-server/tree/master/examples).

View File

@@ -38,8 +38,6 @@ 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

View File

@@ -17,14 +17,12 @@ 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

View File

@@ -31,33 +31,15 @@ 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
# the IPs should start at .2 as .1 is reserved for the gateway environment:
networks: # Point to the service name of the Minecraft server
minecraft-network: SERVER_ADDRESS: mc:25565
ipv4_address: 172.18.0.2 # Required to find the container to manage it
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.
@@ -72,19 +54,11 @@ 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
# Assign a static IP to the server container container_name: minecraft-server
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

View File

@@ -5,34 +5,3 @@ 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)

View File

@@ -80,10 +80,6 @@ Example of expected VanillaTweaks share codes:
VANILLATWEAKS_SHARECODE: MGr52E,tF1zL2,LnEDwT VANILLATWEAKS_SHARECODE: MGr52E,tF1zL2,LnEDwT
``` ```
!!! note
Datapack names are all lower case. [See their spec](https://vanillatweaks.net/assets/resources/json/1.21/dpcategories.json) for a full list of 1.21 datapacks, and [their spec](https://vanillatweaks.net/assets/resources/json/1.21/ctcategories.json) for a full list of 1.21 crafting tweaks.
Example of expected VanillaTweaks files: Example of expected VanillaTweaks files:
``` yaml ``` yaml
@@ -93,14 +89,13 @@ VANILLATWEAKS_FILE: /config/vt-datapacks.json,/config/vt-craftingtweaks.json,/co
``` json title="DataPacks json" ``` json title="DataPacks json"
{ {
"type": "datapacks", "type": "datapacks",
"version": "1.21", "version": "1.18",
"packs": { "packs": {
"gameplay changes": [ "survival": [
"graves", "graves",
"multiplayer sleep", "multiplayer sleep"
"armored elytra"
], ],
"teleport commands": ["tpa"] "items": ["armored elytra"]
} }
} }
``` ```
@@ -108,7 +103,7 @@ VANILLATWEAKS_FILE: /config/vt-datapacks.json,/config/vt-craftingtweaks.json,/co
``` json title="ResourcePacks json" ``` json title="ResourcePacks json"
{ {
"type": "resourcepacks", "type": "resourcepacks",
"version": "1.21", "version": "1.18",
"packs": { "packs": {
"aesthetic": ["CherryPicking", "BlackNetherBricks", "AlternateBlockDestruction"] "aesthetic": ["CherryPicking", "BlackNetherBricks", "AlternateBlockDestruction"]
} }
@@ -119,7 +114,7 @@ VANILLATWEAKS_FILE: /config/vt-datapacks.json,/config/vt-craftingtweaks.json,/co
``` json title="CraftingTweaks Json" ``` json title="CraftingTweaks Json"
{ {
"type": "craftingtweaks", "type": "craftingtweaks",
"version": "1.21", "version": "1.18",
"packs": { "packs": {
"quality of life": [ "quality of life": [
"dropper to dispenser", "dropper to dispenser",

View File

@@ -16,16 +16,14 @@ 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
There are optional volume paths that can be attached to supply content to be copied into the data area: There are optional volume paths that can be attached to supply content to be copied into the data area:
`/plugins` `/plugins`
: content in this directory is synchronized into `/data/plugins` for server types that use plugins, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_PLUGINS_SRC` and destination by setting `COPY_PLUGINS_DEST`. If using a mod-based loader, such as Forge or Fabric, but a hybrid mod like [Cardboard](https://modrinth.com/mod/cardboard), then set `USES_PLUGINS` to have the automation utilize `/plugins` mount. : content in this directory is synchronized into `/data/plugins` for server types that use plugins, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_PLUGINS_SRC` and destination by setting `COPY_PLUGINS_DEST`.
`/mods` `/mods`
: content in this directory is synchronized into `/data/mods` for server types that use mods, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_MODS_SRC` and destination by setting `COPY_MODS_DEST`. : content in this directory is synchronized into `/data/mods` for server types that use mods, [as described above](#mods-vs-plugins). For special cases, the source can be changed by setting `COPY_MODS_SRC` and destination by setting `COPY_MODS_DEST`.
@@ -43,28 +41,8 @@ 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 "Multiple source directories" !!! information ""
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
@@ -100,24 +78,9 @@ If applying large generic packs, the update can be time-consuming. To skip the u
The most time-consuming portion of the generic pack update is generating and comparing the SHA1 checksum. To skip the checksum generation, set `SKIP_GENERIC_PACK_CHECKSUM` to "true". The most time-consuming portion of the generic pack update is generating and comparing the SHA1 checksum. To skip the checksum generation, set `SKIP_GENERIC_PACK_CHECKSUM` to "true".
To disable specific mods, which can be useful for conflicts between multiple generic packs, you can use the `GENERIC_PACKS_DISABLE_MODS` variable to specify mods to disable.
Disabling mods with docker run:
```shell
docker run -d -e GENERIC_PACKS_DISABLE_MODS="mod1.jar mod2.jar" ...
```
Disabling mods within docker compose files:
```yaml
GENERIC_PACKS_DISABLE_MODS: |
mod1.jar
mod2.jar
```
## 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
- URL of a jar file - URL of a jar file
- container path to a jar file - container path to a jar file
- container path to a directory containing jar files - container path to a directory containing jar files

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:bQZpGIz0`<br/>`fabric-api:0.119.2+1.21.4` | | Select specific version | `fabric-api:PbVeub96` |
| 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

View File

@@ -1,7 +1,7 @@
mkdocs-material == 9.6.12 mkdocs-material == 9.5.50
mkdocs-autorefs == 1.4.1 mkdocs-autorefs == 1.3.0
mkdocstrings[python] == 0.29.1 mkdocstrings == 0.27.0
mkdocs-literate-nav == 0.6.2 mkdocs-literate-nav == 0.6.1
mdx-gh-links == 0.4 mdx-gh-links == 0.4
mkdocs-click == 0.9.0 mkdocs-click == 0.8.1
mkdocs-static-i18n == 1.3.0 mkdocs-static-i18n == 1.2.3

View File

@@ -56,9 +56,7 @@ For example:
-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8 -e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8
``` ```
### Pinning modpack and mod loader versions The latest file will be located and used by default, but if a specific version is desired you can use one of the following options. With any of these options **do not select a server file** -- they lack the required manifest and defeat the ability to consistently automate startup.
The latest modpack file and its associated mod loader will be located and installed by default on startup (including automatic upgrading of both on subsequent startups, if a later version is found on CurseForge). If a specific version is desired instead, you can use one of the following options. With any of these options **do not select a server file** -- they lack the required manifest and defeat the ability to consistently automate startup.
- Use `CF_PAGE_URL`, but include the full URL to a specific file - Use `CF_PAGE_URL`, but include the full URL to a specific file
- Set `CF_FILE_ID` to the numerical file ID - Set `CF_FILE_ID` to the numerical file ID
@@ -84,8 +82,6 @@ The following examples all refer to version 1.0.7 of ATM8:
CF_FILENAME_MATCHER: 1.0.7 CF_FILENAME_MATCHER: 1.0.7
``` ```
Pinning modpack version also pins the mod loader (to the version specified by the modpack). Mod loader version cannot be pinned independently of the modpack.
## Manual Downloads ## Manual Downloads
For mod, modpacks, and world files that are not allowed for automated download, the container path `/downloads` can be attached and matching files will be retrieved from there. The subdirectories `mods`, `modpacks`, and `worlds` will also be checked accordingly. To change the source location of downloaded files, set `CF_DOWNLOADS_REPO` to an existing container path. To disable this feature, set `CF_DOWNLOADS_REPO` to an empty string. For mod, modpacks, and world files that are not allowed for automated download, the container path `/downloads` can be attached and matching files will be retrieved from there. The subdirectories `mods`, `modpacks`, and `worlds` will also be checked accordingly. To change the source location of downloaded files, set `CF_DOWNLOADS_REPO` to an existing container path. To disable this feature, set `CF_DOWNLOADS_REPO` to an empty string.

View File

@@ -1,57 +1,23 @@
A [Fabric server](https://fabricmc.net/) can be automatically downloaded, upgraded, and run by setting the environment variable TYPE to "FABRIC" Enable [Fabric server](https://fabricmc.net/) mode by adding a `-e TYPE=FABRIC` to your command-line.
!!! example ```
docker run -d -v /path/on/host:/data \
Using `docker run` command line -e TYPE=FABRIC \
-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
```
With docker run !!! note
```
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:

View File

@@ -1,13 +1,5 @@
A [Forge server](http://www.minecraftforge.net/) can be automatically downloaded, upgraded, and run by setting the environment variable `TYPE` to "FORGE". A [Forge server](http://www.minecraftforge.net/) can be automatically downloaded, upgraded, and run by setting the environment variable `TYPE` to "FORGE".
!!! note "A note from the installer"
> Please do not automate the download and installation of Forge.
Our efforts are supported by ads from the download page.
If you MUST automate this, please consider supporting the project through <https://www.patreon.com/LexManos/>
Since my project also relies on donations, please pass it along and consider contributing to the Patreon above.
!!! example !!! example
``` ```
@@ -22,7 +14,6 @@ A [Forge server](http://www.minecraftforge.net/) can be automatically downloaded
The overall version is specified by `VERSION`, [as described in the section above](../../versions/minecraft.md) and provides the same benefits of upgrading as new versions are released. By default, the recommended version of Forge for that Minecraft version will be selected. The latest version can be selected instead by setting the environment variable `FORGE_VERSION` to "latest". You can also choose a specific Forge version by setting `FORGE_VERSION` with that version, such as "14.23.5.2854". The overall version is specified by `VERSION`, [as described in the section above](../../versions/minecraft.md) and provides the same benefits of upgrading as new versions are released. By default, the recommended version of Forge for that Minecraft version will be selected. The latest version can be selected instead by setting the environment variable `FORGE_VERSION` to "latest". You can also choose a specific Forge version by setting `FORGE_VERSION` with that version, such as "14.23.5.2854".
!!! example !!! example
``` ```
@@ -64,22 +55,3 @@ Support for [NeoForge](https://neoforged.net/) is also provided. A NeoForge serv
VERSION: "1.20.4" VERSION: "1.20.4"
NEOFORGE_VERSION: "beta" NEOFORGE_VERSION: "beta"
``` ```
### Cleanroom
[Cleanroom](https://github.com/CleanroomMC/Cleanroom) isn't fully automated, but can be utilized by...
1. choose the desired release at https://github.com/CleanroomMC/Cleanroom/releases
2. grab the link to the `*-installer.jar` file in that release
3. with `TYPE` set to "FORGE", set `FORGE_INSTALLER_URL` to the installer jar's link
!!! example
In docker compose `environment`
```yaml
TYPE: FORGE
FORGE_INSTALLER_URL: https://github.com/CleanroomMC/Cleanroom/releases/download/0.2.4-alpha/cleanroom-0.2.4-alpha-installer.jar
```
[Full example](https://github.com/itzg/docker-minecraft-server/tree/master/examples/cleanroom)

View File

@@ -10,29 +10,24 @@ 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 | Note | | Tag | Java version | Linux | JVM Type | Architecture |
|------------------|--------------|--------|--------------------|---------------------|------| |------------------|--------------|--------|--------------------|---------------------|
| latest | 21 | Ubuntu | Hotspot | amd64, arm64 | | | latest | 21 | Ubuntu | Hotspot | amd64, arm64 |
| stable | 21 | Ubuntu | Hotspot | amd64, arm64 | | | stable | 21 | Ubuntu | Hotspot | amd64, arm64 |
| java24 | 24 | Ubuntu | Hotspot | amd64, arm64 | (2) | | java21 | 21 | Ubuntu | Hotspot | amd64, arm64 |
| java24-graalvm | 24 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (2) | | java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 |
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | | | java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 |
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | | | java21-graalvm | 21 | Oracle | Oracle GraalVM[^1] | amd64, arm64 |
| java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 | | | java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 |
| java21-graalvm | 21 | Oracle | Oracle GraalVM (3) | amd64, arm64 | | | java17-graalvm | 17 | Oracle | Oracle GraalVM[^1] | amd64, arm64 |
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | | | java17-alpine | 17 | Alpine | Hotspot | amd64 (1) |
| java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | | | java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 |
| java17-alpine | 17 | Alpine | Hotspot | amd64 (1) | | | 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"
@@ -126,17 +121,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.

View File

@@ -4,10 +4,7 @@ services:
environment: environment:
EULA: true EULA: true
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # from .env
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-of-fabric-7 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-of-fabric-7
# CF_FILENAME_MATCHER: 1.2.2 # CF_FILENAME_MATCHER: 1.2.2

View File

@@ -8,10 +8,7 @@ services:
environment: environment:
EULA: true EULA: true
MOD_PLATFORM: AUTO_CURSEFORGE MOD_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: all-the-mods-10 CF_SLUG: all-the-mods-10
# Optional: select a specific version/file # Optional: select a specific version/file

View File

@@ -6,10 +6,7 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-8
# CF_FILENAME_MATCHER: "1.1.0" # CF_FILENAME_MATCHER: "1.1.0"

View File

@@ -6,10 +6,7 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-9 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/all-the-mods-9
# Optional: select a specific version/file # Optional: select a specific version/file

View File

@@ -4,10 +4,7 @@ services:
environment: environment:
EULA: true EULA: true
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_MODPACK_MANIFEST: /manifests/manifest.json CF_MODPACK_MANIFEST: /manifests/manifest.json
CF_SLUG: "custom" CF_SLUG: "custom"

View File

@@ -6,12 +6,40 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/minecraft-eternal/files/4102634 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/minecraft-eternal/files/4102634
CF_EXCLUDE_MODS: |
cherished-worlds
controlling
ctm
custom-main-menu
ding
minecraft-rich-presence
enchantment-descriptions
just-enough-harvestcraft
just-enough-resources-jer
menumobs
more-overlays
mouse-tweaks
oldjavawarning
overloaded-armor-bar
reauth
thaumic-jei
tips
armor-toughness-bar
waila-harvestability
ambientsounds
biomeinfo
block-drops-jei-addon
loot-capacitor-tooltips
no-recipe-book
packmodemenu
resource-reloader
# blockdrops
CF_FORCE_SYNCHRONIZE: "true"
MEMORY: 4G MEMORY: 4G
volumes: volumes:
- mc-data:/data - mc-data:/data

View File

@@ -7,13 +7,11 @@ services:
- "mc:/data" - "mc:/data"
environment: environment:
EULA: "TRUE" EULA: "TRUE"
TYPE: PAPER
ENABLE_AUTOPAUSE: "TRUE" ENABLE_AUTOPAUSE: "TRUE"
MAX_TICK_TIME: "-1" MAX_TICK_TIME: "-1"
# 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:

View File

@@ -4,10 +4,7 @@ services:
environment: environment:
EULA: true EULA: true
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # Set CF_API_KEY=... in a .env file next to this compose file and don't source control that file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: better-mc-fabric-bmc1 CF_SLUG: better-mc-fabric-bmc1
# CF_FILENAME_MATCHER: v18.5 # CF_FILENAME_MATCHER: v18.5

View File

@@ -4,17 +4,17 @@ services:
environment: environment:
EULA: true EULA: true
MODPACK_PLATFORM: MODRINTH MODPACK_PLATFORM: MODRINTH
# NOTE: v36 doesn't startup correctly MODRINTH_MODPACK: https://modrinth.com/modpack/better-mc-forge-bmc4/version/v32.5
MODRINTH_MODPACK: https://modrinth.com/modpack/better-mc-forge-bmc4/version/v34.5 MODRINTH_EXCLUDE_FILES: |
XaeroPlus
XaerosWorldMap
MODRINTH_OVERRIDES_EXCLUSIONS: | MODRINTH_OVERRIDES_EXCLUSIONS: |
config/paxi/datapacks/BE_default_endgen_fix* mods/citresewn-*.jar
**/datapacks/BE_default_endgen_fix*
MODRINTH_FORCE_SYNCHRONIZE: true MODRINTH_FORCE_SYNCHRONIZE: true
MEMORY: 4G MEMORY: 4G
ports: ports:
- "25565:25565" - "25565:25565"
volumes: # declare /data volume mapping as desired
- mc-data:/data # volumes:
# or use a host directory binding
# - ./data:/data # - ./data:/data
volumes:
mc-data:

View File

@@ -1,15 +0,0 @@
# Provides an example of running CleanroomMC from https://github.com/CleanroomMC/Cleanroom,
# which is a Forge fork
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
TYPE: FORGE
FORGE_INSTALLER_URL: https://github.com/CleanroomMC/Cleanroom/releases/download/0.2.4-alpha/cleanroom-0.2.4-alpha-installer.jar
ports:
- "25565:25565"
volumes:
- mc-data:/data
volumes:
mc-data:

View File

@@ -9,14 +9,10 @@ services:
EULA: true EULA: true
ALLOW_FLIGHT: true ALLOW_FLIGHT: true
MOD_PLATFORM: AUTO_CURSEFORGE MOD_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_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: | CF_EXCLUDE_MODS: |
737481 737481
363363 363363

View File

@@ -4,10 +4,7 @@ services:
environment: environment:
EULA: true EULA: true
TYPE: FORGE TYPE: FORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
VERSION: 1.19.2 VERSION: 1.19.2
CURSEFORGE_FILES: | CURSEFORGE_FILES: |

View File

@@ -0,0 +1,13 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: "true"
TYPE: FABRIC
ports:
- "25565:25565"
volumes:
- fabric:/data
volumes:
fabric: {}

View File

@@ -1,16 +1,16 @@
services: services:
mc: mc:
image: itzg/minecraft-server image: itzg/minecraft-server
tty: true container_name: paper
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-data:/data - mc-paper:/data
restart: unless-stopped restart: unless-stopped
volumes: volumes:
mc-data: {} mc-paper: {}

View File

@@ -12,10 +12,7 @@ services:
CURSEFORGE_FILES: | CURSEFORGE_FILES: |
fabric-api fabric-api
chunky-pregenerator chunky-pregenerator
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
# YAML Heredoc, be sure to use '|-' this will remove the first newline and final new line. # YAML Heredoc, be sure to use '|-' this will remove the first newline and final new line.
# This is versus '|' that will leaving with two empty strings at top and bottom. # This is versus '|' that will leaving with two empty strings at top and bottom.

View File

@@ -1,20 +0,0 @@
services:
mc:
image: itzg/minecraft-server:latest
tty: true
stdin_open: true
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: "FABRIC"
MEMORY: 4G
MODRINTH_PROJECTS: |
fabric-api
cardboard:beta
USES_PLUGINS: true
volumes:
- mc-data:/data
- ./plugins:/plugins:ro
volumes:
mc-data:

View File

@@ -1,20 +0,0 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: "true"
TYPE: FABRIC
# VERSION: 1.21.4
# FABRIC_INSTALLER_VERSION: 1.0.1
# 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:
- "25565:25565"
volumes:
- fabric:/data
volumes:
fabric: {}

View File

@@ -9,10 +9,6 @@ services:
environment: environment:
EULA: "TRUE" EULA: "TRUE"
TYPE: AUTO_CURSEFORGE TYPE: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/ftb-evolution CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/ftb-evolution
# This modpack includes an override client-side only mod that will prevent the server from starting. # This modpack includes an override client-side only mod that will prevent the server from starting.

View File

@@ -5,10 +5,6 @@ services:
EULA: true EULA: true
TYPE: KETTING TYPE: KETTING
VERSION: 1.20.1 VERSION: 1.20.1
# Allocate API key from https://console.curseforge.com/
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: "${CF_API_KEY}" CF_API_KEY: "${CF_API_KEY}"
CURSEFORGE_FILES: https://www.curseforge.com/minecraft/mc-mods/aquaculture CURSEFORGE_FILES: https://www.curseforge.com/minecraft/mc-mods/aquaculture
ports: ports:

View File

@@ -1,30 +1,12 @@
# 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
# the IPs should start at .2 as .1 is reserved for the gateway environment:
networks: # Point to the service name of the Minecraft server
minecraft-network: SERVER_ADDRESS: mc:25565
ipv4_address: 172.18.0.2 # Required to find the container to manage it
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.
@@ -39,19 +21,11 @@ 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
# Assign a static IP to the server container container_name: minecraft-server
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

View File

@@ -6,10 +6,7 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # CF_API_KEY=... must be set in .env file or as environment variable
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: one-block-modded CF_SLUG: one-block-modded
# Modpack client zip must be manually downloaded from # Modpack client zip must be manually downloaded from

View File

@@ -6,11 +6,7 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ CF_API_KEY: # allocate from https://console.curseforge.com/
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY}
CF_SLUG: the-pixelmon-modpack CF_SLUG: the-pixelmon-modpack
CF_FILENAME_MATCHER: "9.1.2" CF_FILENAME_MATCHER: "9.1.2"
MEMORY: 4G MEMORY: 4G

View File

@@ -6,10 +6,7 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/prominence-2-rpg CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/prominence-2-rpg
CF_FILENAME_MATCHER: "2.8.7" CF_FILENAME_MATCHER: "2.8.7"

View File

@@ -7,20 +7,20 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/ and set in .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/roguelike-adventures-and-dungeons-2 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/roguelike-adventures-and-dungeons-2
# Optional: select a specific version/file # Optional: select a specific version/file
#CF_FILENAME_MATCHER: "0.2.34" #CF_FILENAME_MATCHER: "0.2.34"
CF_EXCLUDE_MODS: | CF_EXCLUDE_MODS: |
controlling
creative-core creative-core
default-options default-options
itemphysic-lite itemphysic-lite
konkrete konkrete
oauth oauth
sound-filters
toast-control
CF_FORCE_SYNCHRONIZE: "true" CF_FORCE_SYNCHRONIZE: "true"
MEMORY: 4G MEMORY: 4G
volumes: volumes:

View File

@@ -4,10 +4,7 @@ services:
environment: environment:
EULA: true EULA: true
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # Set CF_API_KEY=... in a .env file next to this compose file and don't source control that file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: rlcraft CF_SLUG: rlcraft
CF_FILENAME_MATCHER: 2.9.3 CF_FILENAME_MATCHER: 2.9.3

View File

@@ -8,10 +8,7 @@ services:
# CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/skyfactory-5/files/6044634 # CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/skyfactory-5/files/6044634
CF_SLUG: skyfactory-5 CF_SLUG: skyfactory-5
CF_FILENAME_MATCHER: 5.0.2 CF_FILENAME_MATCHER: 5.0.2
# Allocate API key from https://console.curseforge.com/ # Loads from .env file
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
MEMORY: 4G MEMORY: 4G
ports: ports:

View File

@@ -6,11 +6,7 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ CF_API_KEY: # allocate from https://console.curseforge.com/
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY}
CF_FORCE_SYNCHRONIZE: "true" CF_FORCE_SYNCHRONIZE: "true"
CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/valhelsia-5/files/4429560 CF_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/valhelsia-5/files/4429560
MEMORY: 4G MEMORY: 4G

View File

@@ -6,14 +6,13 @@ services:
environment: environment:
EULA: "true" EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE MODPACK_PLATFORM: AUTO_CURSEFORGE
# Allocate API key from https://console.curseforge.com/ # allocate from https://console.curseforge.com/
# and set in .env file making sure to double up dollar signs, such as
# CF_API_KEY=$$2a$$10$$....
# Refer to https://docker-minecraft-server.readthedocs.io/en/latest/types-and-platforms/mod-platforms/auto-curseforge/#api-key
CF_API_KEY: ${CF_API_KEY} CF_API_KEY: ${CF_API_KEY}
CF_SLUG: vault-hunters-1-18-2 CF_SLUG: vault-hunters-1-18-2
MOTD: "§4----- §2 Vault Hunters: 1.18.2 §4 -----§r\\n §4------ §e vaulthunters.gg §4------" MOTD: "§4----- §2 Vault Hunters: 1.18.2 §4 -----§r\\n §4------ §e vaulthunters.gg §4------"
MEMORY: 6G # 4G for base server + 2G per player MEMORY: 6G # 4G for base server + 2G per player
CF_EXCLUDE_MODS: |
reauth
ALLOW_FLIGHT: true ALLOW_FLIGHT: true
ENABLE_COMMAND_BLOCK: true ENABLE_COMMAND_BLOCK: true
DIFFICULTY: hard DIFFICULTY: hard

View File

@@ -24,31 +24,14 @@ use_proxy() {
fi fi
} }
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
echo "--use-server-list-ping"
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" --timeout 10s >&/dev/null
} }
java_clients_connections() { java_clients_connections() {
local connections local connections
if java_running; then if java_running; then
if ! connections=$(mc-monitor status \ if ! connections=$(mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --show-player-count); then
--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

View File

@@ -24,7 +24,6 @@
"cherished-worlds", "cherished-worlds",
"chunk-animator", "chunk-animator",
"clickable-advancements", "clickable-advancements",
"compass-coords",
"configured", "configured",
"controlling", "controlling",
"craftpresence", "craftpresence",
@@ -73,6 +72,7 @@
"just-enough-mekanism-multiblocks", "just-enough-mekanism-multiblocks",
"just-enough-resources-jer", "just-enough-resources-jer",
"just-zoom", "just-zoom",
"konkrete",
"legendary-tooltips", "legendary-tooltips",
"lighty", "lighty",
"loot-capacitor-tooltips", "loot-capacitor-tooltips",
@@ -114,8 +114,6 @@
"sodium-extra", "sodium-extra",
"sodium-options-api", "sodium-options-api",
"sodium-rubidium-occlusion-culling-fix", "sodium-rubidium-occlusion-culling-fix",
"sound",
"sound-reloader",
"sound-filters", "sound-filters",
"sound-physics-remastered", "sound-physics-remastered",
"stellar-sky", "stellar-sky",

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"> <Configuration status="WARN" packages="com.mojang.util">
<Appenders> <Appenders>
<Console name="SysOut" target="SYSTEM_OUT"> <Console name="SysOut" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" /> <PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level]: %msg%n" />

View File

@@ -22,7 +22,6 @@
"cherishedworlds", "cherishedworlds",
"citresewn", "citresewn",
"clickadv", "clickadv",
"compass-coords",
"connectedness", "connectedness",
"connector", "connector",
"craftpresence", "craftpresence",

View File

@@ -39,7 +39,7 @@ if ! isTrue "${SKIP_SUDO:-false}" && [ "$(id -u)" = 0 ]; then
fi fi
fi fi
if isFalse "${SKIP_CHOWN_DATA}" && [[ $(stat -c "%u" /data) != "$UID" ]]; then if isTrue "${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

View File

@@ -32,7 +32,6 @@ 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

View File

@@ -106,7 +106,6 @@ export VERSION
variants=( variants=(
run.sh run.sh
fabric-server-launch.jar
"${modLoader}-${mcVersion}-${modLoaderVersion}-universal.jar" "${modLoader}-${mcVersion}-${modLoaderVersion}-universal.jar"
"${modLoader}-${mcVersion}-${modLoaderVersion}-${mcVersion}-universal.jar" "${modLoader}-${mcVersion}-${modLoaderVersion}-${mcVersion}-universal.jar"
"${modLoader}-${mcVersion}-${modLoaderVersion}-server-launch.jar" "${modLoader}-${mcVersion}-${modLoaderVersion}-server-launch.jar"

View File

@@ -21,20 +21,6 @@ if [[ ${FORGE_INSTALLER} ]]; then
logError "Failed to installForge given installer ${FORGE_INSTALLER}" logError "Failed to installForge given installer ${FORGE_INSTALLER}"
exit 1 exit 1
fi fi
elif [[ ${FORGE_INSTALLER_URL:-} ]]; then
mkdir -p tmp
if ! installer=$(get -o tmp --output-filename "${FORGE_INSTALLER_URL}"); then
logError "Failed to download installer from $FORGE_INSTALLER_URL"
exit 1
fi
# shellcheck disable=SC2064
trap "rm $installer" EXIT
if ! mc-image-helper-forge --forge-installer="${installer}" ; then
logError "Failed to install forge from ${FORGE_INSTALLER_URL}"
exit 1
fi
else else
if ! mc-image-helper-forge --forge-version="${FORGE_VERSION}"; then if ! mc-image-helper-forge --forge-version="${FORGE_VERSION}"; then
logError "Failed to install Forge" logError "Failed to install Forge"

View File

@@ -155,7 +155,6 @@ function handleGenericPacks() {
: "${GENERIC_PACKS:=${GENERIC_PACK}}" : "${GENERIC_PACKS:=${GENERIC_PACK}}"
: "${GENERIC_PACKS_PREFIX:=}" : "${GENERIC_PACKS_PREFIX:=}"
: "${GENERIC_PACKS_SUFFIX:=}" : "${GENERIC_PACKS_SUFFIX:=}"
: "${GENERIC_PACKS_DISABLE_MODS:=}"
if [[ "${GENERIC_PACKS}" ]]; then if [[ "${GENERIC_PACKS}" ]]; then
IFS=',' read -ra packs <<< "${GENERIC_PACKS}" IFS=',' read -ra packs <<< "${GENERIC_PACKS}"
@@ -193,12 +192,6 @@ function handleGenericPacks() {
extract "${pack}" "${base_dir}" extract "${pack}" "${base_dir}"
done done
# Disable mods
for mod in ${GENERIC_PACKS_DISABLE_MODS}; do
log Disabling $mod
find "${base_dir}" -name "$mod" -exec mv {} {}.disabled -v \;
done
# Remove any eula file since container manages it # Remove any eula file since container manages it
rm -f "${base_dir}/eula.txt" rm -f "${base_dir}/eula.txt"

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; then if usesPlugins && [ -d "${COPY_PLUGINS_SRC}" ]; 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; then if usesMods && [ -d "${COPY_MODS_SRC}" ]; 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,7 +55,9 @@ fi
: "${COPY_CONFIG_SRC:="/config"}" : "${COPY_CONFIG_SRC:="/config"}"
: "${COPY_CONFIG_DEST:="/data/config"}" : "${COPY_CONFIG_DEST:="/data/config"}"
log "Copying any configs from ${COPY_CONFIG_SRC} to ${COPY_CONFIG_DEST}" if [ -d "${COPY_CONFIG_SRC}" ]; then
mc-image-helper-mounts "${COPY_CONFIG_SRC}" "${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}"
fi
exec "${SCRIPTS:-/}start-setupServerProperties" "$@" exec "${SCRIPTS:-/}start-setupServerProperties" "$@"

View File

@@ -77,18 +77,13 @@ if [[ -v WHITELIST_FILE ]]; then
fi fi
if [[ -v WHITELIST ]]; then if [[ -v WHITELIST ]]; then
args=() args=()
if isTrue "${APPEND_WHITELIST:-false}" || isFalse "${OVERRIDE_WHITELIST:-true}"; then
args+=(--append-only)
fi
existing="$EXISTING_WHITELIST_FILE" existing="$EXISTING_WHITELIST_FILE"
if [[ "$EXISTING_WHITELIST_FILE" = SYNC_FILE_MERGE_LIST ]]; then if [[ "$EXISTING_WHITELIST_FILE" = SYNC_FILE_MERGE_LIST ]]; then
existing=MERGE existing=MERGE
fi fi
# legacy option
if [[ -v APPEND_WHITELIST ]] && isTrue "${APPEND_WHITELIST}"; then
existing=MERGE
fi
# legacy option
if [[ -v OVERRIDE_WHITELIST ]] && isFalse "${OVERRIDE_WHITELIST}"; then
existing=SKIP
fi
# shellcheck disable=SC2086 # shellcheck disable=SC2086
mc-image-helper manage-users \ mc-image-helper manage-users \
"${sharedArgs[@]}" "${args[@]}" \ "${sharedArgs[@]}" "${args[@]}" \

View File

@@ -464,33 +464,21 @@ function checkSum() {
} }
function usesMods() { function usesMods() {
if isTrue "${USES_MODS:-}"; then case "$FAMILY" in
FORGE | FABRIC | HYBRID | SPONGE)
return 0 return 0
;;
else esac
case "$FAMILY" in return 1
FORGE | FABRIC | HYBRID | SPONGE)
return 0
;;
esac
return 1
fi
} }
function usesPlugins() { function usesPlugins() {
if isTrue "${USES_PLUGINS:-}"; then case "$FAMILY" in
SPIGOT | HYBRID)
return 0 return 0
;;
else esac
case "$FAMILY" in return 1
SPIGOT | HYBRID)
return 0
;;
esac
return 1
fi
} }
function resolveVersion() { function resolveVersion() {

View File

@@ -6,8 +6,10 @@ 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_PAGE_URL: https://www.curseforge.com/minecraft/modpacks/the-pixelmon-modpack/files/5954570 CF_SLUG: the-pixelmon-modpack
DEBUG: true CF_FILENAME_MATCHER: "9.1.2"
# 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

View File

@@ -6,7 +6,7 @@ services:
EULA: "TRUE" EULA: "TRUE"
SETUP_ONLY: "TRUE" SETUP_ONLY: "TRUE"
TYPE: FABRIC TYPE: FABRIC
VERSION: 1.20.1 VERSION: 1.18.2
# 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

View File

@@ -1 +1 @@
architectury-api@9.2.14 architectury-api@4.12.94

View File

@@ -5,7 +5,7 @@ services:
EULA: "true" EULA: "true"
SETUP_ONLY: "true" SETUP_ONLY: "true"
TYPE: FABRIC TYPE: FABRIC
VERSION: 1.21.4 VERSION: 1.19.1
MODRINTH_PROJECTS: fabric-api,cloth-config MODRINTH_PROJECTS: fabric-api,cloth-config
volumes: volumes:
- ./data:/data - ./data:/data

View File

@@ -47,7 +47,6 @@ 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