Compare commits

...

35 Commits

Author SHA1 Message Date
Geoff Bourne
a465d759b8 deps: upgrade rcon-cli to 1.7.2 2025-08-17 17:09:24 -05:00
Geoff Bourne
75082daa1d modrinth: fix force include handling of default-excluded project (#3622) 2025-08-16 16:50:43 -05:00
Geoff Bourne
b1d68a65aa deps: upgrade helper for Reactor Netty 1.2.9 (#3620) 2025-08-14 20:34:34 -05:00
Geoff Bourne
11414c83c1 Provide option to disable HTTP/2 use (#3619) 2025-08-13 18:45:02 -05:00
Geoff Bourne
720006b445 Revert "Properly retry download when fabric installer is invalid" (#3618) 2025-08-13 11:52:25 -05:00
Geoff Bourne
9d2cd1475e Properly retry download when fabric installer is invalid (#3617) 2025-08-13 06:43:20 -05:00
dependabot[bot]
acfd6fadf8 build(deps): bump docker/login-action from 3.4.0 to 3.5.0 in the updates group (#3615) 2025-08-12 11:16:37 -05:00
Geoff Bourne
ba172b2aa9 Added all image tags to images.json (#3613) 2025-08-10 22:11:54 -05:00
Geoff Bourne
e4859fb23a Add images.json (#3612) 2025-08-10 22:06:31 -05:00
Geoff Bourne
eb682118ff Add Modrinth default exclusions needed for cobbleverse (#3609) 2025-08-10 12:17:46 -05:00
Geoff Bourne
2fbc804f3e misc: organize more of examples into subdirs as compose projects (#3608) 2025-08-10 09:06:58 -05:00
Geoff Bourne
5bd6287f52 misc: refactored bin content into files/shims (#3607) 2025-08-10 09:05:10 -05:00
Geoff Bourne
b6a8b95159 Validate Fabric launcher jar and use HTTP/2 (#3606) 2025-08-09 17:35:15 -05:00
Geoff Bourne
0d834dd992 Fixed VERSION_FROM_MODRINTH_PROJECTS when a project has a shorter list (#3605) 2025-08-09 13:41:20 -05:00
Geoff Bourne
0a5ac8aba6 Analyze CF_API_KEY key when auth failures (#3604) 2025-08-08 20:14:36 -05:00
Geoff Bourne
37d2aebb1e Populate MODPACK_NAME and MODPACK_VERSION from FTB modpacks (#3602) 2025-08-08 13:18:31 -05:00
Geoff Bourne
d5d1592c38 Pass proxy properties via MC_IMAGE_HELPER_OPTS (#3601) 2025-08-07 08:11:56 -05:00
Geoff Bourne
dedacfb94e Fixed noise with picking up JAVA_TOOL_OPTIONS (#3599) 2025-08-06 20:25:12 -05:00
Geoff Bourne
c6e970c8d2 Fixed HTTP proxy handling for operations using mc-image-helper (#3598) 2025-08-06 19:57:56 -05:00
Geoff Bourne
fa56741869 Limit/config concurrent downloads for CF and Modrinth (#3596) 2025-08-05 18:55:26 -05:00
EmilyxFox
2abae7462c Add clarifying information for CurseForge API keys (#3594) 2025-08-04 19:42:11 -05:00
dependabot[bot]
a569d63cf3 build(deps): bump docker/metadata-action from 5.7.0 to 5.8.0 in the updates group (#3589) 2025-08-04 06:51:00 -05:00
Geoff Bourne
e305782a8f Forge promotions and maven repo URLs are configurable (#3587) 2025-08-03 19:29:30 -05:00
Geoff Bourne
24c352949c Added skyfactory 4 example and excluding waila-stages (#3586) 2025-08-03 17:10:49 -05:00
Geoff Bourne
6ee414337a Update Forge promotions URL (#3584) 2025-08-03 07:56:12 -05:00
Geoff Bourne
c2071e5038 Add VERSION_FROM_MODRINTH_PROJECTS (#3580) 2025-08-02 19:01:49 -05:00
dependabot[bot]
02640e5414 build(deps): bump the patches group in /docs with 2 updates (#3572) 2025-07-28 10:31:53 -06:00
Geoff Bourne
ac806b756c modrinth: prioritize target loader when resolving project versions (#3570) 2025-07-26 19:48:37 -06:00
Geoff Bourne
605e2ea993 Upgrade dev mkdocs to Python 3.11 (#3569) 2025-07-24 12:49:36 -06:00
Navio1430
c9dd6dc72c update NanoLimbo repository name (#3564) 2025-07-20 07:16:42 -05:00
bobo
d8bca85d55 cf + modrinth: exclude config-menus-forge & welcome-screen (#3561)
Co-authored-by: Geoff Bourne <itzgeoff@gmail.com>
2025-07-20 07:16:17 -05:00
Geoff Bourne
3acc867f58 cf: exclude fastquit (#3555) 2025-07-19 06:56:47 -05:00
Geoff Bourne
8463893168 fabric: add option to force reinstall (#3559) 2025-07-19 06:55:03 -05:00
Michel Suárez
5b79daa4a3 Fix pufferfish url script (#3553) 2025-07-15 06:55:22 -05:00
Graham Keeth
1fd1e15f3c Docs: fix env var for enabling query (#3552) 2025-07-13 10:40:24 -05:00
63 changed files with 382 additions and 231 deletions

View File

@@ -12,6 +12,7 @@ on:
- "examples/**"
- "notes/**"
- "kustomize/**"
- "images.json"
jobs:
build:
@@ -125,7 +126,7 @@ jobs:
- name: Docker meta
id: meta
uses: docker/metadata-action@v5.7.0
uses: docker/metadata-action@v5.8.0
with:
# NOTE for forks: if your Docker Hub organization doesn't match your Github repo's,
# then the use of ${{ github.repository_owner }} will need to be replaced.
@@ -185,14 +186,14 @@ jobs:
tests/test.sh
- name: Login to DockerHub
uses: docker/login-action@v3.4.0
uses: docker/login-action@v3.5.0
if: env.HAS_IMAGE_REPO_ACCESS
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GHCR
uses: docker/login-action@v3.4.0
uses: docker/login-action@v3.5.0
if: env.HAS_IMAGE_REPO_ACCESS
with:
registry: ghcr.io

View File

@@ -11,6 +11,7 @@ on:
- "kustomize/**"
- "docker-compose*.yml"
- "mkdocs.yml"
- "images.json"
jobs:
build:

View File

@@ -33,7 +33,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG RCON_CLI_VERSION=1.7.1
ARG RCON_CLI_VERSION=1.7.2
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--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
@@ -48,7 +48,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_HELPER_VERSION=1.47.0
ARG MC_HELPER_VERSION=1.48.10
ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
# used for cache busting local copy of mc-image-helper
ARG MC_HELPER_REV=1
@@ -65,8 +65,7 @@ STOPSIGNAL SIGTERM
ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000 LC_ALL=en_US.UTF-8
COPY --chmod=755 scripts/start* /
COPY --chmod=755 bin/ /usr/local/bin/
COPY --chmod=755 bin/mc-health /health.sh
COPY --chmod=755 files/shims/ /usr/local/bin/
COPY --chmod=755 files/* /image/
COPY --chmod=755 files/auto /auto

View File

@@ -1,4 +1,4 @@
FROM python:3.9
FROM python:3.11
RUN pip install --upgrade pip

View File

@@ -107,11 +107,7 @@ such as:
## HTTP Proxy
You may configure the use of an HTTP/HTTPS proxy by passing the proxy's URL via the `PROXY`
environment variable. In [the example compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-proxied.yml) it references
a companion squid proxy by setting the equivalent of
-e PROXY=proxy:3128
You may configure the use of an HTTP/HTTPS proxy by passing the proxy's "host:port" via the environment variable `PROXY`. In [the example compose file](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-proxied.yml) it references a Squid proxy. The host and port can be separately passed via the environment variables `PROXY_HOST` and `PROXY_PORT`. A `|` delimited list of hosts to exclude from proxying can be passed via `PROXY_NON_PROXY_HOSTS`.
## Using "noconsole" option

View File

@@ -256,7 +256,7 @@ By default, the server listens for RCON on port 25575 within the container. It c
### Query
Set the environment variable `QUERY_PORT` to "true" to enable the gamespy query protocol. Map to the server property [enable-query](https://minecraft.wiki/w/Server.properties#enable-query). By default, the query port will be `25565` (UDP) but can be changed with the `QUERY_PORT` environment variable.
Set the environment variable `ENABLE_QUERY` to "true" to enable the gamespy query protocol. Maps to the server property [enable-query](https://minecraft.wiki/w/Server.properties#enable-query). By default, the query port will be `25565` (UDP) but can be changed with the `QUERY_PORT` environment variable.
### Level Seed

View File

@@ -7,14 +7,14 @@ CONTAINER ID IMAGE COMMAND CREATED
b418af073764 mc "/start" 43 seconds ago Up 41 seconds (healthy) 0.0.0.0:25565->25565/tcp, 25575/tcp mc
```
You can also query the container's health in a script friendly way:
You can also query the container's health in a script-friendly way:
``` shell
> docker container inspect -f "{{.State.Health.Status}}" mc
healthy
```
There's actually a wrapper script called `mc-health` that takes care of calling `mc-monitor status` with the correct arguments. If needing to customize the health checks parameters, such as in a compose file, then use something like the following in the service declaration:
There's actually a wrapper script called `mc-health` that takes care of calling `mc-monitor status` with the correct arguments. If needing to customize the health checks parameters, such as in a Compose file, then use something like the following in the service declaration:
``` yaml
healthcheck:
@@ -24,9 +24,16 @@ healthcheck:
retries: 20
```
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of healthchecks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
Some orchestration systems, such as Portainer, don't allow for disabling the default `HEALTHCHECK` declared by this image. In those cases you can approximate the disabling of health checks by setting the environment variable `DISABLE_HEALTHCHECK` to `true`.
### Healthchecks for older versions
The [health check in a Compose service declaration](https://docs.docker.com/reference/compose-file/services/#healthcheck) can also be disabled using:
This container disables Healthchecks for Versions before b1.8 as those versions do not support any kind of server pinging.
For more information see [Server List Ping](https://wiki.vg/Server_List_Ping#Beta_1.8_to_1.3)
```yaml
healthcheck:
disable: true
test: ["NONE"]
```
### Health checks for older versions
This container disables health checks for Minecraft versions before b1.8 as those versions do not support any kind of server pinging. For more information see [Server List Ping](https://minecraft.wiki/w/Java_Edition_protocol/Server_List_Ping#Beta_1.8_to_1.3).

View File

@@ -42,6 +42,25 @@
datapack:terralith
```
## Version from Projects
When the environment variable `VERSION_FROM_MODRINTH_PROJECTS` is set to "true" the Minecraft [`VERSION`](../versions/minecraft.md) will be automatically determined by looking at the most recent version of Minecraft that is supported by all the projects provided in `MODRINTH_PROJECTS`.
!!! example
Given the environment variables
```yaml
MODRINTH_PROJECTS: |
viaversion
viabackwards
griefprevention
discordsrv
VERSION_FROM_MODRINTH_PROJECTS: true
```
Let's say all are supported on Minecraft up to 1.21.8 except griefprevention, which is only supported up to 1.21.7. In that case, `VERSION` will be automatically set to 1.21.7.
## Extra options
`MODRINTH_DOWNLOAD_DEPENDENCIES`
@@ -52,3 +71,4 @@
`MODRINTH_LOADER`
: When using a custom server, set this to specify which loader type will be requested during lookups

View File

@@ -1,6 +1,6 @@
mkdocs-material == 9.6.15
mkdocs-material == 9.6.16
mkdocs-autorefs == 1.4.2
mkdocstrings[python] == 0.29.1
mkdocstrings[python] == 0.30.0
mkdocs-literate-nav == 0.6.2
mdx-gh-links == 0.4
mkdocs-click == 0.9.0

View File

@@ -12,6 +12,7 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
Example if your key is `$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa`:
```yaml
# compose.yaml
environment:
CF_API_KEY: '$$11$$22$$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
```
@@ -21,17 +22,35 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
docker run ... -e CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
```
To avoid exposing the API key, it is highly recommended to use a `.env` file, which is [loaded automatically by docker compose](https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with-an-env-file). `$`'s in the value still need to escaped with a second `$` and the variable needs to be referenced from the compose file, such as:
To avoid exposing the API key, it is highly recommended to use a `.env` file, which is [loaded automatically by docker compose](https://docs.docker.com/compose/environment-variables/set-environment-variables/#substitute-with-an-env-file). You **do not** need to escape `$`'s with a second `$` in the `.env` file **as long as the key is wrapped in single quotes**.
```
# .env
CF_API_KEY='$11$22$33aaaaaaaaaaaaaaaaaaaaaaaaaa'
```
The variable should to be referenced from the compose file, such as:
```yaml
# compose.yaml
environment:
CF_API_KEY: ${CF_API_KEY}
```
The .env file should be placed in the same directory as your compose file like so:
```
/minecraft-server
├── .env
├── compose.yaml
├── /data
```
To use the equivalent with `docker run` you need to specify the `.env` file explicitly:
```
docker run --env-file=.env itzg/minecraft-server
```
Alternately you can use [docker secrets](https://docs.docker.com/compose/how-tos/use-secrets/) with a `CF_API_KEY_FILE` environment variable:
```
service:
@@ -39,7 +58,7 @@ To manage a CurseForge modpack automatically with upgrade support, pinned or lat
CF_API_KEY_FILE: /run/secrets/cf_api_key
secrets:
- cf_api_key
secrets:
cf_api_key:
file: cf_api_key.secret

View File

@@ -41,21 +41,27 @@ A specific loader or launcher version other than the latest can be requested usi
FABRIC_LOADER_VERSION: 0.13.1
```
!!! note "Fabric API"
!!! note
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
```
See the [Working with mods and plugins](../../mods-and-plugins/index.md) section to set up Fabric mods and configuration.
!!! note "Alternate launcher"
## Fabric API
If you wish to use an alternative launcher you can:
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:
- Provide the path to a custom launcher jar available to the container with `FABRIC_LAUNCHER`, relative to `/data` (such as `-e FABRIC_LAUNCHER=fabric-server-custom.jar`)
- Provide the URL to a custom launcher jar with `FABRIC_LAUNCHER_URL` (such as `-e FABRIC_LAUNCHER_URL=http://HOST/fabric-server-custom.jar`)
```yaml
TYPE: FABRIC
MODRINTH_PROJECTS: |
fabric-api
```
See the [Working with mods and plugins](../../mods-and-plugins/index.md) section to set up Fabric mods and configuration.
## Alternate launcher
If you wish to use an alternative launcher you can:
- Provide the path to a custom launcher jar available to the container with `FABRIC_LAUNCHER`, relative to `/data` (such as `-e FABRIC_LAUNCHER=fabric-server-custom.jar`)
- Provide the URL to a custom launcher jar with `FABRIC_LAUNCHER_URL` (such as `-e FABRIC_LAUNCHER_URL=http://HOST/fabric-server-custom.jar`)
## Force re-install
If the Fabric launcher jar becomes corrupted you can temporarily set FABRIC_FORCE_REINSTALL to "true" to have it re-installed on next startup.

View File

@@ -45,6 +45,11 @@ In both of the cases above, there is no need for the `VERSION` or `FORGE_VERSION
If an error occurred while installing Forge, it might be possible to resolve by temporarily setting `FORGE_FORCE_REINSTALL` to "true". Be sure to remove that variable after successfully starting the server.
URLs configurable via environment variables:
- `FORGE_PROMOTIONS_URL`: default is https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json
- `FORGE_MAVEN_REPO_URL`: default is https://maven.minecraftforge.net
## Alternatives
### NeoForge

View File

@@ -41,7 +41,9 @@ Configuration options with defaults:
## NanoLimbo
A [NanoLimbo](https://github.com/Nan1t/NanoLimbo) server can be run by setting `TYPE` to `NANOLIMBO`.
A [NanoLimbo](https://github.com/BoomEaro/NanoLimbo) server can be run by setting `TYPE` to `NANOLIMBO`.
Note: it is a fork of the original [NanoLimbo](https://github.com/Nan1t/NanoLimbo) made by Nan1t
An alternate Limbo server

View File

@@ -139,3 +139,7 @@ The following image tags have been deprecated and are no longer receiving update
- java23-*
- java8-multiarch is still built and pushed, but please move to java8 instead
- java8-alpine, java8-jdk, java8-openj9, java8-graalvm-ce
## JSON Listing
Information about the image tags is available programmatically at <https://raw.githubusercontent.com/itzg/docker-minecraft-server/refs/heads/master/images.json>

View File

@@ -0,0 +1,16 @@
services:
mc:
image: itzg/minecraft-server:java8
environment:
EULA: "true"
MODPACK_PLATFORM: AUTO_CURSEFORGE
CF_SLUG: skyfactory-4
CF_FILENAME_MATCHER: 4.2.4
CF_API_KEY: ${CF_API_KEY}
MEMORY: 3G
ports:
- "25565:25565"
volumes:
- mc-data:/data
volumes:
mc-data:

View File

@@ -1,157 +0,0 @@
####################################################################
# FORGE GENERIC_PACK #
# #
# Date: 20220828 #
# #
# Mod: TNP Limitless 5 v2.19.0 #
# #
# Notes: Verify that there is no EULA file in the modpack.zip #
# if you do not delete it the EULA flag below will be #
# overwritten when the modpack is copied and the server #
# will not start. #
# #
####################################################################
services:
####################################################################
# Service Name #
# #
# Define Service Name here. If using RCON this name will be #
# referenced again as RWA_RCON_HOST below. #
# #
# Example: 'name:' or 'mc_atm6:' #
####################################################################
mc_tnp5:
####################################################################
# Image & Container Name #
# #
# Specify Image Name and Java Version. The 'image' will always be #
# 'itzg/minecraft-server' however the tag added to the end is #
# where you can specify the java version or container architecture.#
# See readme.md for a full list. #
# #
# 'container_name:' This can be anything you like. This is the name#
# that will show when you run 'docker ps' commands. #
####################################################################
image: itzg/minecraft-server
container_name: mc_tnp5
####################################################################
# Server Ports #
# #
# Specify external port. #
####################################################################
ports:
- 25565:25565
####################################################################
# Automatic Server Restart #
# #
# Define a restart policy here. #
# - 'no' = Do not restart. #
# - 'on-failure' = Restart if container exits because an error. #
# - 'always' = Regardless of stop reason. #
# - 'unless-stopped' = Similar to always except if stopped. #
####################################################################
restart: unless-stopped
####################################################################
# Volume and Folder Access #
# #
# This section defines what folders and volumes you want to give #
# this container access to. It is recommended to leaves these set #
# to the default values unless you know what you are doing. #
# #
# Place your mod zip file in a folder called 'modpacks' in the #
# same directory you place this docker-compose file. #
# #
# Specify the data volume name or directory here as well. #
# In this example the volume name is 'data'. When docker creates #
# the volume it will add what ever name you give it here to the #
# end of the container name specified above. In this example it #
# would be named 'mc_atm6_data'. If you change this be sure to #
# update the volume name at the bottom of this config. #
####################################################################
volumes:
- ./modpacks:/modpacks:ro
- data:/data
####################################################################
# EULA #
# #
# Accept EULA by setting to "true" #
####################################################################
environment:
EULA: "true"
####################################################################
# FORGE INSTALL #
# #
# Sets install type to FORGE and specifys the zip folder name #
# and location of your mod pack. #
# #
# TYPE: Defines the install type as FORGE #
# #
# VERSION: Defines the version of MC the modpack is based on. #
# #
# FORGE_VERSION: Defines the version of FORGE the modpack uses. #
# This can usually be found in the modpack.zip as #
# installer.jar #
# #
# GENERIC_PACK: Define where the modpack.zip is located. #
# #
# Place your mod zip file in a folder called 'modpacks' in the #
# same directory you place this docker-compose file. #
####################################################################
TYPE: FORGE
VERSION: 1.18.2
FORGE_VERSION: 40.1.73
GENERIC_PACK: /modpacks/tnp5.zip
####################################################################
# Server Memory #
# #
# Set Maximum amount of memory allowed for your server. #
####################################################################
MEMORY: "8G"
####################################################################
# Logging Options #
# #
# Set to "true" to delete old logs #
####################################################################
ENABLE_ROLLING_LOGS: "true"
####################################################################
# Server Timezone #
# #
# Specify server Timezone #
####################################################################
TZ: "America/New_York"
####################################################################
# Minecraft Game Options #
# #
# List any game options you want to define here. A full list can #
# be found on the readme.md page on github. #
####################################################################
OVERRIDE_SERVER_PROPERTIES: "true"
DIFFICULTY: "easy"
MAX_TICK_TIME: "-1"
VIEW_DISTANCE: "6"
ALLOW_FLIGHT: "true"
OPS: ""
MAX_PLAYERS: 10
PVP: "false"
LEVEL_TYPE: "biomesoplenty"
MOTD: "Welcome Home"
####################################################################
# Volumes #
# #
# Define data volume name here. You should leave this set to the #
# default. #
####################################################################
volumes:
data:

View File

@@ -1,19 +0,0 @@
services:
mc:
image: itzg/minecraft-server:${IMAGE_TAG:-latest}
volumes:
- data:/data
- ./modpacks:/modpacks:ro
environment:
EULA: "true"
TYPE: FORGE
DEBUG: "${DEBUG:-false}"
VERSION: ${VERSION:-1.17.1}
FORGE_VERSION: ${FORGE_VERSION:-37.0.90}
GENERIC_PACK: /modpacks/${MODPACK:-Server-Files-0.0.21.zip}
REMOVE_OLD_MODS: "${REMOVE_OLD_MODS:-false}"
ports:
- "25565:25565"
volumes:
data: {}

View File

@@ -12,6 +12,9 @@ services:
# Use Pack ID from https://www.feed-the-beast.com/modpacks/119-ftb-presents-direwolf20-120?tab=about
FTB_MODPACK_ID: "119"
# FTB_MODPACK_VERSION_ID: ""
MOTD: |
An FTB server running
%MODPACK_NAME% version %MODPACK_VERSION%
MEMORY: 4G
volumes:
# use a named, managed volume for data volume

View File

@@ -0,0 +1,15 @@
services:
mc:
image: itzg/minecraft-server
environment:
EULA: true
TYPE: paper
MODRINTH_PROJECTS: |
viaversion
viabackwards
griefprevention
discordsrv
VERSION_FROM_MODRINTH_PROJECTS: true
MEMORY: 2G
ports:
- "25565:25565"

View File

@@ -28,6 +28,7 @@
"chunk-animator",
"clickable-advancements",
"compass-coords",
"config-menus-forge",
"configured",
"controllable",
"controlling",
@@ -64,6 +65,8 @@
"fancymenu",
"farsight",
"faster-ladder-climbing",
"fastquit",
"fastquit-forge",
"flerovium",
"foamfix-optimization-mod",
"forgeskyboxes",
@@ -154,8 +157,10 @@
"vanillafix",
"visuality",
"waila-harvestability",
"waila-stages",
"wakes-reforged",
"wawla",
"welcome-screen",
"xaeroplus",
"yungs-menu-tweaks",
"zume"

View File

@@ -10,8 +10,9 @@
"axolotlbuckets",
"BadOptimizations",
"BetterAdvancements",
"BetterGrassify",
"betterbeds",
"BetterF3",
"BetterGrassify",
"BetterThirdPerson",
"BHMenu",
"blur",
@@ -23,16 +24,21 @@
"cherishedworlds",
"citresewn",
"clickadv",
"cobblemon-ui-tweaks",
"compass-coords",
"connectedness",
"connector",
"continuity",
"controlling",
"craftpresence",
"cwb",
"DisableCustomWorldsAdvice",
"distraction_free_recipes",
"drippyloadingscreen",
"eating-animation",
"emi",
"emi_loot",
"emi_trade",
"emiffect",
"emitrades",
"entity_model_features",
@@ -42,14 +48,17 @@
"fallingleaves",
"fancymenu",
"fast-ip-ping",
"fastquit",
"FauxCustomEntityData",
"feytweaks",
"figura",
"ForgeConfigScreens",
"GeckoLibIrisCompat",
"gpumemleakfix",
"Highlighter",
"ImmediatelyFast",
"indium",
"inventory-profiles-next",
"iris",
"iris-flywheel",
"ItemBorders",
@@ -69,9 +78,10 @@
"PickUpNotifier",
"PresenceFootsteps",
"Prism",
"reforgium",
"reeses_sodium_options",
"reforgium",
"ResourcePackOverrides",
"roughly-enough-items",
"ryoamiclights",
"screenshot_viewer",
"Searchables",
@@ -80,13 +90,24 @@
"skinlayers3d",
"sodium",
"sorted_enchantments",
"tooltipfix",
"visuality",
"VR-Combat",
"WailaStages",
"welcomescreen",
"Xaeros_Minimap",
"XaerosWorldMap",
"YeetusExperimentus",
"yungsmenutweaks",
"Zoomify",
"zume"
],
"globalForceIncludes": [],
"modpacks": {}
"modpacks": {
"cobbleverse": {
"excludes": [
"cloth-config"
]
}
}
}

0
bin/mc-health → files/shims/mc-health Executable file → Normal file
View File

View File

0
bin/mcstatus → files/shims/mcstatus Executable file → Normal file
View File

134
images.json Normal file
View File

@@ -0,0 +1,134 @@
[
{
"tag": "latest",
"notes": "Always tracks the most recent commit on the main branch",
"java": "21",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"],
"lts": true
},
{
"tag": "stable",
"notes": "Always tracks the most recent release",
"java": "21",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"],
"lts": true
},
{
"tag": "java24",
"java": "24",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"]
},
{
"tag": "java24-graalvm",
"java": "24",
"distribution": "oracle",
"jvm": "graalvm",
"architectures": ["amd64", "arm64"]
},
{
"tag": "java21",
"java": "21",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"],
"lts": true
},
{
"tag": "java21-alpine",
"java": "21",
"distribution": "alpine",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"]
},
{
"tag": "java21-graalvm",
"java": "21",
"distribution": "oracle",
"jvm": "graalvm",
"architectures": ["amd64", "arm64"],
},
{
"tag": "java21-jdk",
"java": "21",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"],
"jdk": true
},
{
"tag": "java21-graalvm",
"java": "21",
"distribution": "oracle",
"jvm": "graalvm",
"architectures": ["amd64", "arm64"],
},
{
"tag": "java17",
"java": "17",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"],
"lts": true
},
{
"tag": "java17-alpine",
"java": "17",
"distribution": "alpine",
"jvm": "hotspot",
"architectures": ["amd64", "arm64"]
},
{
"tag": "java17-graalvm",
"java": "17",
"distribution": "oracle",
"jvm": "graalvm",
"architectures": ["amd64", "arm64"]
},
{
"tag": "java16",
"java": "16",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64", "armv7"]
},
{
"tag": "java11",
"java": "11",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64", "armv7"],
"lts": true
},
{
"tag": "java8",
"java": "8",
"distribution": "ubuntu",
"jvm": "hotspot",
"architectures": ["amd64", "arm64", "armv7"],
"lts": true
},
{"tag": "adopt13", "deprecated": true},
{"tag": "adopt14", "deprecated": true},
{"tag": "adopt15", "deprecated": true},
{"tag": "openj9-nightly", "deprecated": true},
{"tag": "multiarch-latest", "deprecated": true},
{"tag": "java16-openj9", "deprecated": true},
{"tag": "java17-graalvm-ce", "deprecated": true},
{"tag": "java17-openj9", "deprecated": true},
{"tag": "java19", "deprecated": true},
{"tag": "java20-graalvm", "deprecated": true},
{"tag": "java20", "deprecated": true},
{"tag": "java20-alpine", "deprecated": true},
{"tag": "java23", "deprecated": true},
{"tag": "java8-multiarch", "deprecated": true},
{"tag": "java8-alpine", "deprecated": true},
{"tag": "java8-jdk", "deprecated": true},
{"tag": "java8-openj9", "deprecated": true},
{"tag": "java8-graalvm-ce", "deprecated": true}
]

View File

@@ -50,7 +50,7 @@ fi
if isTrue "${DEBUG_MEMORY:-false}"; then
log "Memory usage and availability (in MB)"
uname -a
uname -parts
free -m
fi
@@ -101,21 +101,38 @@ if isTrue "${ENABLE_AUTOPAUSE}" && isTrue "${ENABLE_AUTOSTOP}"; then
exit 1
fi
proxyArgs=()
if [[ $PROXY ]]; then
export http_proxy="$PROXY"
export https_proxy="$PROXY"
export JAVA_TOOL_OPTIONS+="-Djava.net.useSystemProxies=true"
log "INFO: Giving proxy time to startup..."
sleep 5
IFS=":"
read -ra parts <<< "$PROXY"
IFS=" "
: "${PROXY_HOST=$(firstArrayElement parts)}"
shiftArray parts
: "${PROXY_PORT=$(firstArrayElement parts)}"
fi
# https://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html
proxyArgs=()
function addToProxyArgs() {
if [[ $2 ]]; then
proxyArgs+=("-D$1=$2")
fi
}
addToProxyArgs http.proxyHost "${PROXY_HOST:-}"
addToProxyArgs http.proxyPort "${PROXY_PORT:-}"
addToProxyArgs http.nonProxyHosts "${PROXY_NON_PROXY_HOSTS:-}"
export MC_IMAGE_HELPER_OPTS+=" ${proxyArgs[*]}"
function fixJavaPath() {
# Some Docker management UIs grab all the image declared variables and present them for configuration.
# When upgrading images across Java versions, that creates a mismatch in PATH's expected by base image.
# When upgrading images across Java versions, that creates parts mismatch in PATH's expected by base image.
if ! which java > /dev/null; then
logError " Your Docker provider has an annoying flaw where it"
logError " tries to set PATH even though the container establishes"
logError " a very specific value."
logError " parts very specific value."
sleep 2
# now find where java might be
for d in /opt/java/openjdk/bin /usr/bin; do
@@ -139,6 +156,15 @@ cd /data || exit 1
export DECLARED_TYPE=${TYPE^^}
export DECLARED_VERSION="$VERSION"
if isTrue "${VERSION_FROM_MODRINTH_PROJECTS:-}" && [[ ${MODRINTH_PROJECTS:-} ]]; then
if ! VERSION=$(mc-image-helper version-from-modrinth-projects --projects "${MODRINTH_PROJECTS}"); then
logError "failed to resolve version from MODRINTH_PROJECTS: ${MODRINTH_PROJECTS}"
exit 1
fi
log "Resolved Minecraft version $VERSION from Modrinth projects"
export VERSION
fi
if isTrue "${ENABLE_AUTOPAUSE}"; then
"${SCRIPTS:-/}start-autopause"
fi

View File

@@ -36,6 +36,12 @@ function getModLoaderVersion() {
function getMinecraftVersion() {
jq -r ".modPackTargets.mcVersion" ${ftbManifest}
}
function getModpackName() {
jq -r ".name" ${ftbManifest}
}
function getModpackVersion() {
jq -r ".versionName" ${ftbManifest}
}
if [[ $(getDistro) = alpine ]]; then
logError "The FTBA installer is not supported on Alpine. Use the java8-multiarch image tag instead."
@@ -102,7 +108,9 @@ modLoader="$(getModLoaderName)"
modLoaderVersion="$(getModLoaderVersion)"
mcVersion=$(getMinecraftVersion)
VERSION="$mcVersion"
export VERSION
MODPACK_NAME=$(getModpackName)
MODPACK_VERSION=$(getModpackVersion)
export VERSION MODPACK_NAME MODPACK_VERSION
variants=(
run.sh

View File

@@ -9,15 +9,24 @@ export TYPE=FABRIC
: "${FABRIC_LAUNCHER:=}"
: "${FABRIC_LAUNCHER_URL:=}"
: "${FABRIC_LOADER_VERSION:=LATEST}"
: "${FABRIC_FORCE_REINSTALL:=false}"
resultsFile=/data/.install-fabric.env
isDebugging && set -x
commonArgs=(
--results-file="${resultsFile}"
)
if isTrue "${FABRIC_FORCE_REINSTALL}"; then
log "Forcing re-install of Fabric"
commonArgs+=(--force-reinstall)
fi
# Custom fabric jar
if [[ $FABRIC_LAUNCHER ]]; then
if ! mc-image-helper install-fabric-loader \
--results-file=${resultsFile} \
"${commonArgs[@]}" \
--from-local-file="$FABRIC_LAUNCHER"; then
logError "Failed to use provided Fabric launcher"
exit 1
@@ -26,7 +35,7 @@ if [[ $FABRIC_LAUNCHER ]]; then
# Custom fabric jar url
elif [[ $FABRIC_LAUNCHER_URL ]]; then
if ! mc-image-helper install-fabric-loader \
--results-file=${resultsFile} \
"${commonArgs[@]}" \
--from-url="$FABRIC_LAUNCHER_URL"; then
logError "Failed to installFabric launcher from $FABRIC_LAUNCHER_URL"
exit 1
@@ -35,7 +44,7 @@ elif [[ $FABRIC_LAUNCHER_URL ]]; then
# Official fabric launcher
else
if ! mc-image-helper install-fabric-loader \
--results-file=${resultsFile} \
"${commonArgs[@]}" \
--minecraft-version="${VERSION}" \
--installer-version="${FABRIC_LAUNCHER_VERSION}" \
--loader-version="${FABRIC_LOADER_VERSION}"; then

View File

@@ -14,6 +14,7 @@ resultsFile=/data/.install-modrinth.env
: "${MODRINTH_FORCE_INCLUDE_FILES=}"
: "${MODRINTH_OVERRIDES_EXCLUSIONS=}"
: "${MODRINTH_DEFAULT_EXCLUDE_INCLUDES=/image/modrinth-exclude-include.json}"
: "${MODRINTH_FORCE_MODLOADER_REINSTALL:=${FORCE_MODLOADER_REINSTALL:-false}}"
if [[ ! $MODRINTH_MODPACK ]]; then
logError "MODRINTH_MODPACK must be set when using TYPE/MODPACK_PLATFORM/MOD_PLATFORM of MODRINTH"
@@ -33,6 +34,9 @@ args=(
if [[ $MODRINTH_IGNORE_MISSING_FILES ]]; then
args+=(--ignore-missing-files "$MODRINTH_IGNORE_MISSING_FILES")
fi
if isTrue "${MODRINTH_FORCE_MODLOADER_REINSTALL}"; then
args+=(--force-modloader-reinstall)
fi
case "${VERSION^^}" in
LATEST)

View File

@@ -7,7 +7,7 @@ isDebugging && set -x
if ! SERVER=$(mc-image-helper github download-latest-asset \
--output-directory=/data \
--name-pattern="NanoLimbo-.+?(?<!-sources)\.jar" \
Nan1t/NanoLimbo
BoomEaro/NanoLimbo
); then
logError "Failed to download NanoLimbo"
exit 1

View File

@@ -21,7 +21,9 @@ PUFFERFISH_BUILD_JSON=$(curl -X GET -s "https://ci.pufferfish.host/job/Pufferfis
PUFFERFISH_BUILD_URL=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.url // empty' )
# Example: "fileName": "pufferfish-paperclip-1.18.2-R0.1-SNAPSHOT-reobf.jar",
PUFFERFISH_BUILD_FILENAME=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.artifacts[].fileName // empty' )
PUFFERFISH_BUILD_DOWNLOAD_URL="${PUFFERFISH_BUILD_URL}artifact/build/libs/${PUFFERFISH_BUILD_FILENAME}"
# Example: "relativePath": "pufferfish-server/build/libs/pufferfish-paperclip-1.21.7-R0.1-SNAPSHOT-mojmap.jar",
PUFFERFISH_BUILD_PATH=$(jq -n "$PUFFERFISH_BUILD_JSON" | jq -jc '.artifacts[].relativePath // empty' )
PUFFERFISH_BUILD_DOWNLOAD_URL="${PUFFERFISH_BUILD_URL}artifact/${PUFFERFISH_BUILD_PATH}"
# Setting server to the Jar filename for export.
export SERVER=$PUFFERFISH_BUILD_FILENAME

View File

@@ -538,4 +538,18 @@ function buildDownloadList() {
result+="${repoUrl}/${version}/$c"
done
echo "$result"
}
}
function firstArrayElement {
local -n a="$1"
if (( ${#a[@]} )); then
echo "${a[0]}"
fi
}
function shiftArray {
local -n a="$1"
if (( ${#a[@]} )); then
a=("${a[@]:1}")
fi
}

View File

@@ -0,0 +1,9 @@
services:
mc:
restart: "no"
image: ${IMAGE_TO_TEST:-itzg/minecraft-server}
environment:
EULA: "TRUE"
TYPE: NANOLIMBO
volumes:
- ./data:/data

View File

@@ -0,0 +1 @@
mc-image-helper assert fileExists "/data/NanoLimbo-*.jar"