From 2258a6bb5bf7386d1237c7e9c32edb28745d955f Mon Sep 17 00:00:00 2001 From: JeremyStarTM Date: Thu, 25 Jan 2024 23:12:09 +0100 Subject: [PATCH] Initial commit --- .dockerignore | 1 + Dockerfile | 12 ++++++++ Makefile | 14 +++++++++ README.md | 5 +++ entrypoint.sh | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 README.md create mode 100755 entrypoint.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f3c7a7c --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +Makefile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9ebde17 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM ghcr.io/archlinux/archlinux:latest +LABEL org.opencontainers.image.authors="JeremyStarTM " + +RUN pacman -Syu --noconfirm jre17-openjdk jre11-openjdk jre8-openjdk +RUN mkdir /app +RUN useradd -U -m mcserver +ADD entrypoint.sh /app/entrypoint.sh + +STOPSIGNAL SIGTERM +EXPOSE 25565 25565/tcp +USER mcserver:mcserver +ENTRYPOINT ["/sbin/bash", "/app/entrypoint.sh"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3afcb68 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +.PHONY: dist help build test + +dist: help +help: + @echo "make help [Displays help]" + @echo " build [Builds the docker image]" + @echo " test [Tests the docker image]" + @echo " clean [Cleans the docker build cache]" +build: + docker buildx build --progress tty --tag mcserverdocker:repobuild . +clean: + docker buildx prune --all --force +test: + docker run mcserverdocker:repobuild diff --git a/README.md b/README.md new file mode 100644 index 0000000..703dbbf --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# MCServerDocker +Runs a Minecraft Server inside a docker container. + +# Java Edition only +This only supports the true version of Minecraft, not that phone and console spinoff named "Bedrock Edition". diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..d760d3c --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,84 @@ +#!/usr/sbin/env bash +# Disables warning about echo not expanding escape sequences +# shellcheck disable=SC2028 + +function print_banner() { + echo " ____ ____ ____ __" + echo " /'\\_/\`\\/\\ _\`\\ /\\ _\`\\ /\\ _\`\\ /\\ \\" + echo "/\\ \\ \\ \\/\\_\\\\ \\,\\L\\_\\ __ _ __ __ __ __ _ __\\ \\ \\/\\ \\ ___ ___\\ \\ \\/'\\ __ _ __" + echo "\\ \\ \\__\\ \\ \\ \\/_/_\\/_\\__ \\ /'__\`\\/\\\`'__\\/\\ \\/\\ \\ /'__\`\\/\\\`'__\\ \\ \\ \\ \\ / __\`\\ /'___\\ \\ , < /'__\`\\/\\\`'__\\" + echo " \\ \\ \\_/\\ \\ \\ \\L\\ \\ /\\ \\L\\ \\/\\ __/\\ \\ \\/ \\ \\ \\_/ |/\\ __/\\ \\ \\/ \\ \\ \\_\\ \\/\\ \\L\\ \\/\\ \\__/\\ \\ \\\\\`\\ /\\ __/\\ \\ \\/" + echo " \\ \\_\\\\ \\_\\ \\____/ \\ \`\\____\\ \\____\\\\ \\_\\ \\ \\___/ \\ \\____\\\\ \\_\\ \\ \\____/\\ \\____/\\ \\____\\\\ \\_\\ \\_\\ \\____\\\\ \\_\\" + echo " \\/_/ \\/_/\\/___/ \\/_____/\\/____/ \\/_/ \\/__/ \\/____/ \\/_/ \\/___/ \\/___/ \\/____/ \\/_/\\/_/\\/____/ \\/_/" +} + +function initialize() { + echo ":: Initializing MCSD" + export "ARGS=--nogui " + if [ -z "${MCSD_ENFORCE_FRESH_CACHES}" ]; then + export "ARGS=${ARGS}--eraseCache " + fi + if [ -z "${MCSD_FORCE_UPGRADE}" ]; then + export "ARGS=${ARGS}--forceUpgrade " + fi + if [ -z "${MCSD_SAFEMODE}" ]; then + export "ARGS=${ARGS}--safeMode " + fi + if [ ! "${MCSD_AUTO_RESTART}" == "true" ] && [ ! "${MCSD_AUTO_RESTART}" == "false" ]; then + echo ":: Warning: No/Invalid auto restart value supplied, defaulting to false" + export "MCSD_AUTO_RESTART=false" + fi + if [ ! "${MCSD_JAVA_VERSION}" == "17" ] && [ ! "${MCSD_JAVA_VERSION}" == "11" ] && [ ! "${MCSD_JAVA_VERSION}" == "8" ]; then + echo ":: Warning: No/Invalid java version supplied, defaulting to java version 17" + export "MCSD_JAVA_VERSION=17" + fi +} + +function check() { + echo ":: Checking environment" + if [ ! -d "/data" ]; then + echo ":: Error: Could not locate /data directory" + exit 1 + fi + if [ ! -f "/data/server.jar" ]; then + echo ":: Error: Could not locate server.jar" + exit 1 + fi +} + +function run() { + echo ":: Starting server" + # We want to use ${ARGS} without using parenthesis + # shellcheck disable=SC2086 + "/usr/lib/jvm/java-${MCSD_JAVA_VERSION}-openjdk/bin/java" -jar "/data/server.jar" ${ARGS} + export "exitcode=${?}" + # yes it is assigned you idiot + # shellcheck disable=SC2154 + if [ "${exitcode}" == "0" ]; then + echo ":: The server was shut down successfully" + else + echo ":: The server was forcefully shut down (code ${exitcode})" + fi + case "${MCSD_AUTO_RESTART}" in + "true") + echo ":: Restarting server after shutdown" + run + ;; + "false") + echo ":: Ending execution" + exit 0 + ;; + *) + echo ":: An internal error occured (run function, can't decide MCSD_AUTO_RESTART)" + ;; + esac +} + +function main() { + print_banner + initialize + check + run +} + +main