Compatibility
Minecraft: Java Edition
1.21.1
Platforms
Supported environments
Dedicated servers only
Tags
Creators
Details
Licensed MIT
Published 10 months ago
Updated 10 months ago
This mod makes dedicated server more friendly for docker usecases, allowing easily create isolated server setup within seconds without using bloated third-party images and pieces of software.
It can:
- apply server properties from SERVER_PROPERTIES env varibale
- auto-op players from SERVER_OPERATORS env varibale
- handles process signals correctly and gracefully shut-down server process
example Dockerfile
Note, entrypoint must exec java binary in order to handle signals properly and have nice graceful shutdown.
FROM eclipse-temurin:25-jre-alpine-3.23 AS server-build
RUN mkdir /server && apk update && apk add wget
WORKDIR /server
RUN wget -O /installer.jar https://maven.neoforged.net/releases/net/neoforged/neoforge/21.1.217/neoforge-21.1.217-installer.jar
RUN java -jar /installer.jar --installServer
RUN echo "eula=true" > eula.txt
FROM eclipse-temurin:25-jre-alpine-3.23
COPY --from=server-build /server /server
RUN cat <<'EOF' > /server/entrypoint.sh
#/usr/bin/env sh
set -e
USER_ID=${USER_ID:-1000}
GROUP_ID=${GROUP_ID:-1000}
USERNAME=${USERNAME:-appuser}
if ! getent group "$GROUP_ID" >/dev/null 2>&1; then
addgroup -g "$GROUP_ID" "$USERNAME"
fi
if ! id -u "$USER_ID" >/dev/null 2>&1; then
adduser -D -u "$USER_ID" -G "$USERNAME" -s /bin/bash "$USERNAME"
fi
echo "$SERVER_JAVA_OPTS" > user_jvm_args.txt
chown -R "$USER_ID":"$GROUP_ID" .
exec su-exec "$USERNAME" sh -c 'exec java @user_jvm_args.txt @libraries/net/neoforged/neoforge/21.1.217/unix_args.txt'
EOF
RUN chmod +x /server/entrypoint.sh
RUN apk add --no-cache su-exec
WORKDIR /server
CMD ["/server/entrypoint.sh"]
example docker-compose.yml
services:
minecraft-server:
build: ./container
container_name: minecraft-server
stdin_open: true
tty: true
ports:
- "25565:25565"
volumes:
- ./data/mods:/server/mods
- ./data/world:/server/world
environment:
SERVER_JAVA_OPTS: |2
-Xms2G
-Xmx10G
-XX:+UseZGC
-XX:+ZGenerational
-XX:+AlwaysPreTouch
-XX:+UseStringDeduplication
SERVER_OPERATORS: |2
op-player-uuid
another-op-player-uuid
SERVER_PROPERTIES: |2
max-players=20
motd=Welcome to the Minecraft Server!
online-mode=false
difficulty=normal
gamemode=survival
spawn-monsters=true
view-distance=10
white-list=false
pvp=true
generate-structures=true
max-world-size=29999984
enable-query=false
enable-rcon=false
enable-status=false
restart: unless-stopped


