mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-03-19 21:15:58 +00:00
Compare commits
18 Commits
4e4d6959e4
...
2026.3.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fba656561f | ||
|
|
cf8ab31e25 | ||
|
|
68bb650617 | ||
|
|
c5a298fa05 | ||
|
|
5dff0b8541 | ||
|
|
9c9a3a8b43 | ||
|
|
3bbe3b7c80 | ||
|
|
ddb3dbf776 | ||
|
|
1cf70665bb | ||
|
|
a543ee7ebc | ||
|
|
a69017b5e1 | ||
|
|
e3f715e9ca | ||
|
|
1904798a75 | ||
|
|
7c2c0ded70 | ||
|
|
a62be28cfd | ||
|
|
6402e72fda | ||
|
|
8b2f26535d | ||
|
|
e202239e66 |
5
.github/workflows/build.yml
vendored
5
.github/workflows/build.yml
vendored
@@ -27,6 +27,7 @@ jobs:
|
||||
# NOTE: the "latest" variant is identified in the Docker meta step's 'latest' config
|
||||
variant:
|
||||
- java25
|
||||
- java25-alpine
|
||||
- java25-jdk
|
||||
- java21
|
||||
- java21-alpine
|
||||
@@ -42,6 +43,10 @@ jobs:
|
||||
baseImage: eclipse-temurin:25-jre
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: latest
|
||||
- variant: java25-alpine
|
||||
baseImage: eclipse-temurin:25-jre-alpine
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: latest
|
||||
- variant: java25-jdk
|
||||
baseImage: eclipse-temurin:25
|
||||
platforms: linux/amd64,linux/arm64
|
||||
|
||||
40
.github/workflows/issue-label.yml
vendored
40
.github/workflows/issue-label.yml
vendored
@@ -1,33 +1,17 @@
|
||||
name: Issue labels
|
||||
name: Issues notify
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [labeled, reopened, closed, deleted]
|
||||
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_ISSUES_WEBHOOK }}
|
||||
types:
|
||||
- opened
|
||||
- labeled
|
||||
- unlabeled
|
||||
- closed
|
||||
|
||||
jobs:
|
||||
labelNotify:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- name: notify on label
|
||||
if: >
|
||||
github.event.label.name == 'enhancement'
|
||||
|| github.event.label.name == 'bug'
|
||||
|| github.event.label.name == 'help wanted'
|
||||
|| github.event.label.name == 'priority/high'
|
||||
|| github.event.label.name == 'question'
|
||||
|| github.event.label.name == 'status/waiting on upstream'
|
||||
uses: Ilshidur/action-discord@master
|
||||
with:
|
||||
args: "[${{ github.event.issue.title }} (#${{ github.event.issue.number }})](<${{ github.event.issue.html_url }}>) added `${{ github.event.label.name }}` label"
|
||||
- name: notify on action change
|
||||
if: >
|
||||
github.event.action == 'closed'
|
||||
|| github.event.action == 'reopened'
|
||||
|| github.event.action == 'deleted'
|
||||
uses: Ilshidur/action-discord@master
|
||||
with:
|
||||
args: "[${{ github.event.issue.title }} (#${{ github.event.issue.number }})](<${{ github.event.issue.html_url }}>) has been `${{ github.event.action }}` by `${{ github.event.sender.login }}`"
|
||||
notify:
|
||||
uses: itzg/github-workflows/.github/workflows/issues-notify-discord.yml@main
|
||||
with:
|
||||
triageLabel: 'status/needs triage'
|
||||
secrets:
|
||||
discordWebhook: "${{secrets.DISCORD_ISSUES_WEBHOOK}}"
|
||||
|
||||
6
.github/workflows/verify-pr.yml
vendored
6
.github/workflows/verify-pr.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
matrix:
|
||||
variant:
|
||||
- java25
|
||||
- java21-alpine
|
||||
- java25-alpine
|
||||
- java17
|
||||
- java8
|
||||
include:
|
||||
@@ -32,8 +32,8 @@ jobs:
|
||||
baseImage: eclipse-temurin:25-jre
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: latest
|
||||
- variant: java21-alpine
|
||||
baseImage: eclipse-temurin:21-jre-alpine
|
||||
- variant: java25-alpine
|
||||
baseImage: eclipse-temurin:25-jre-alpine
|
||||
platforms: linux/amd64,linux/arm64
|
||||
mcVersion: latest
|
||||
# JAVA 17:
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
version: 2
|
||||
|
||||
python:
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
||||
|
||||
build:
|
||||
os: ubuntu-24.04
|
||||
tools:
|
||||
python: latest
|
||||
python: "3.14"
|
||||
jobs:
|
||||
# We recommend using a requirements file for reproducible builds.
|
||||
# This is just a quick example to get started.
|
||||
# https://docs.readthedocs.io/page/guides/reproducible-builds.html
|
||||
install:
|
||||
- pip install zensical
|
||||
- pip install -r docs/requirements.txt
|
||||
build:
|
||||
html:
|
||||
- zensical build
|
||||
|
||||
@@ -37,7 +37,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/rcon-cli
|
||||
ARG RCON_CLI_VERSION=1.7.3
|
||||
ARG RCON_CLI_VERSION=1.7.4
|
||||
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
|
||||
@@ -49,13 +49,13 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/mc-server-runner
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.14.1
|
||||
ARG MC_SERVER_RUNNER_VERSION=1.14.3
|
||||
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
|
||||
|
||||
# renovate: datasource=github-releases packageName=itzg/mc-image-helper versioning=loose
|
||||
ARG MC_HELPER_VERSION=1.54.1
|
||||
ARG MC_HELPER_VERSION=1.55.2
|
||||
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
|
||||
|
||||
@@ -31,6 +31,7 @@ apk add --no-cache -U \
|
||||
libpcap \
|
||||
libwebp \
|
||||
libcap \
|
||||
numactl \
|
||||
${EXTRA_ALPINE_PACKAGES}
|
||||
|
||||
# Download and install patched knockd
|
||||
|
||||
@@ -27,6 +27,7 @@ apt-get install -y \
|
||||
lbzip2 \
|
||||
nfs-common \
|
||||
libpcap0.8 \
|
||||
libnuma1 \
|
||||
${EXTRA_DEB_PACKAGES}
|
||||
|
||||
# Install Git LFS
|
||||
|
||||
@@ -166,7 +166,7 @@ such as:
|
||||
|
||||
## HTTP Proxy
|
||||
|
||||
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`.
|
||||
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/proxied/compose.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
|
||||
|
||||
|
||||
@@ -1,4 +1,84 @@
|
||||
|
||||
## Simple image additions
|
||||
|
||||
You can easily build upon the base image using an inline Dockerfile.
|
||||
|
||||
```yaml title="compose.yaml"
|
||||
services:
|
||||
mc:
|
||||
build:
|
||||
context: .
|
||||
dockerfile_inline: |
|
||||
FROM itzg/minecraft-server:latest
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
webp \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
pull: true # Always pull new base image
|
||||
pull_policy: build
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
EULA: true
|
||||
ports:
|
||||
- "25565:25565/tcp"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
Here is an example to add Nvidia GPU support for C2ME:
|
||||
|
||||
??? Example "C2ME GPU example"
|
||||
```yaml title="compose.yaml"
|
||||
|
||||
services:
|
||||
mc:
|
||||
build:
|
||||
context: .
|
||||
dockerfile_inline: |
|
||||
FROM itzg/minecraft-server:java25
|
||||
|
||||
# Install OpenCL loader and NVIDIA driver capabilities
|
||||
RUN apt-get update && apt-get install -y \
|
||||
ocl-icd-libopencl1 \
|
||||
opencl-headers \
|
||||
clinfo \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 1. Create the vendor directory
|
||||
# 2. Tell OpenCL to use the NVIDIA library
|
||||
RUN mkdir -p /etc/OpenCL/vendors && \
|
||||
echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
|
||||
|
||||
# Tell the NVIDIA container runtime to expose all GPU capabilities (including compute/utility)
|
||||
ENV NVIDIA_VISIBLE_DEVICES all
|
||||
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,graphics,video
|
||||
|
||||
COPY ./mods /mods
|
||||
pull: true # Always pull new base image
|
||||
pull_policy: build
|
||||
restart: unless-stopped
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: 1
|
||||
capabilities: [gpu]
|
||||
environment:
|
||||
EULA: true
|
||||
TYPE: "FABRIC"
|
||||
VERSION: 1.21.10
|
||||
MEMORY: 8G
|
||||
MODRINTH_PROJECTS: |-
|
||||
fabric-api
|
||||
c2me
|
||||
ports:
|
||||
- "25565:25565/tcp"
|
||||
volumes:
|
||||
- ./data:/data
|
||||
```
|
||||
|
||||
|
||||
!!! tip "For advanced use only"
|
||||
|
||||
This page describes a capability that is not applicable to most users. It is only intended for rare cases when a very specific Java base image is needed or additional packages need to be installed that are not generally applicable or would bloat the image size.
|
||||
|
||||
@@ -9,12 +9,12 @@ MarkupSafe==3.0.3
|
||||
mergedeep==1.3.4
|
||||
mkdocs==1.6.1
|
||||
mkdocs-autorefs==1.4.4
|
||||
mkdocs-get-deps==0.2.0
|
||||
mkdocs-get-deps==0.2.2
|
||||
mkdocstrings==1.0.3
|
||||
mkdocstrings-python==2.0.2
|
||||
mkdocstrings-python==2.0.3
|
||||
packaging==26.0
|
||||
pathspec==1.0.4
|
||||
platformdirs==4.9.2
|
||||
platformdirs==4.9.4
|
||||
Pygments==2.19.2
|
||||
pymdown-extensions==10.21
|
||||
python-dateutil==2.9.0.post0
|
||||
@@ -22,4 +22,4 @@ PyYAML==6.0.3
|
||||
pyyaml_env_tag==1.1
|
||||
six==1.17.0
|
||||
watchdog==6.0.0
|
||||
# zensical @ file:///
|
||||
zensical==0.0.27
|
||||
|
||||
@@ -15,25 +15,19 @@ where `<tag>` refers to the first column of this table:
|
||||
| latest | 25 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| stable | 25 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java25 | 25 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java25-alpine | 25 | Alpine | Hotspot | amd64, arm64 | |
|
||||
| java25-jdk | 25 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
|
||||
| java25-graalvm | 25 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (5) |
|
||||
| java21 | 21 | Ubuntu | Hotspot | amd64, arm64 | |
|
||||
| java21-jdk | 21 | Ubuntu | Hotspot+JDK | amd64, arm64 | |
|
||||
| java21-alpine | 21 | Alpine | Hotspot | amd64, arm64 | |
|
||||
| java21-graalvm | 21 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (5) |
|
||||
| java17 | 17 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java17-graalvm | 17 | Oracle | Oracle GraalVM (3) | amd64, arm64 | (5) |
|
||||
| java16 | 16 | Ubuntu | Hotspot | amd64, arm64, armv7 | (4) |
|
||||
| java16 | 16 | Ubuntu | Hotspot | amd64, arm64, armv7 | (1) |
|
||||
| java11 | 11 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
| java8 | 8 | Ubuntu | Hotspot | amd64, arm64, armv7 | |
|
||||
|
||||
Notes
|
||||
|
||||
1. Why no arm64 for Java 17 Alpine? That is because the base images, such as [elipse-temurin](https://hub.docker.com/_/eclipse-temurin/tags?page=&page_size=&ordering=&name=17-jre-alpine) do not provide support for that. Use the Ubuntu-based images instead.
|
||||
2. Short-term variant, subject to deprecation upon next version introduction
|
||||
3. Based on the [Oracle GraalVM images](https://blogs.oracle.com/java/post/new-oracle-graalvm-container-images), which as of JDK 17, are now under the [GraalVM Free License](https://blogs.oracle.com/java/post/graalvm-free-license) incorporating what used to be known as the GraalVM Enterprise.
|
||||
4. This version of Java is [recommended for PaperMC 1.16.5](https://docs.papermc.io/paper/getting-started/#requirements)
|
||||
5. Due to these images using Oracle Linux, (which is based on Red Hat Enterprise Linux) Forge Installer will not work due to its use of zlib-ng. Use other images for initial installation and Forge version upgrade.
|
||||
1. This version of Java is [recommended for PaperMC 1.16.5](https://docs.papermc.io/paper/getting-started/#requirements)
|
||||
|
||||
!!! example "Example using java8"
|
||||
|
||||
@@ -127,6 +121,7 @@ Forge also doesn't support openj9 JVM implementation.
|
||||
|
||||
The following image tags have been deprecated and are no longer receiving updates:
|
||||
|
||||
- java25-graalvm, java21-graalvm, java17-graalvm
|
||||
- adopt13
|
||||
- adopt14
|
||||
- adopt15
|
||||
|
||||
13
images.json
13
images.json
@@ -24,12 +24,20 @@
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java25-alpine",
|
||||
"java": "25",
|
||||
"distribution": "alpine",
|
||||
"jvm": "hotspot",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
},
|
||||
{
|
||||
"tag": "java25-graalvm",
|
||||
"java": "25",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"deprecated": true
|
||||
},
|
||||
{
|
||||
"tag": "java24",
|
||||
@@ -67,7 +75,8 @@
|
||||
"java": "21",
|
||||
"distribution": "oracle",
|
||||
"jvm": "graalvm",
|
||||
"architectures": ["amd64", "arm64"]
|
||||
"architectures": ["amd64", "arm64"],
|
||||
"deprecated": true
|
||||
},
|
||||
{
|
||||
"tag": "java21-jdk",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 75 KiB |
@@ -54,8 +54,8 @@ fi
|
||||
|
||||
if isTrue "${DEBUG_MEMORY:-false}"; then
|
||||
log "Memory usage and availability (in MB)"
|
||||
uname -pars
|
||||
free -m
|
||||
uname -pars | applyLogPrefix
|
||||
free -m | applyLogPrefix
|
||||
fi
|
||||
|
||||
##########################################
|
||||
|
||||
@@ -8,8 +8,11 @@ function getGTNHdownloadPath(){
|
||||
gtnh_download_path=""
|
||||
current_java_version=$(mc-image-helper java-release)
|
||||
|
||||
if ! packs_data="$(restify --tag=a https://www.gtnewhorizons.com/version-history/ | jq -r '.[].href | select(test("Server"))')"; then
|
||||
logError "Failed to retrieve data from http://downloads.gtnewhorizons.com/ServerPacks/?raw"
|
||||
if ! packs_data="$(
|
||||
curl -fsSL "https://downloads.gtnewhorizons.com/versions.json" \
|
||||
| jq -r '.versions[]?.server? | .[]? | select(type=="string" and test("Server"))'
|
||||
)"; then
|
||||
logError "Failed to retrieve data from https://downloads.gtnewhorizons.com/versions.json"
|
||||
exit 1
|
||||
fi
|
||||
mapfile -t packs <<< "$packs_data"
|
||||
|
||||
@@ -125,6 +125,12 @@ function logn() {
|
||||
echo -n "[init] $*"
|
||||
}
|
||||
|
||||
# Use as
|
||||
# cmd | applyLogPrefix
|
||||
function applyLogPrefix() {
|
||||
sed 's/^/[init] /'
|
||||
}
|
||||
|
||||
function log() {
|
||||
local oldState
|
||||
# The return status when listing options is zero if all optnames are enabled, non- zero otherwise.
|
||||
|
||||
Reference in New Issue
Block a user