diff --git a/README.md b/README.md index 64c8fd80..3a0adec9 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ services: EULA: "TRUE" volumes: # attach the relative directory 'data' to the container's /data path - ./data:/data + - ./data:/data ``` ## Versions @@ -528,6 +528,9 @@ A [Mohist](https://github.com/Mohist-Community/Mohist) server can be used with > **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2" +By default the latest build will be used; however, a specific build number can be selected by setting `MOHIST_BUILD`, such as + + -e VERSION=1.16.5 -e MOHIST_BUILD=374 ## Running a Catserver type server @@ -729,16 +732,14 @@ every time you want to create new Minecraft server, you can now use ``` minecraft-server: + image: itzg/minecraft-server + ports: - "25565:25565" environment: EULA: "TRUE" - image: itzg/minecraft-server - - container_name: mc - tty: true stdin_open: true restart: always @@ -946,7 +947,11 @@ It determines the server-side viewing distance. If you want to create the Minecraft level with a specific seed, use `SEED`, such as - docker run -d -e SEED=1785852800490497919 ... + -e SEED=1785852800490497919 + +If using a negative value for the seed, make sure to quote the value such as: + + -e SEED="-1785852800490497919" ### Game Mode @@ -968,16 +973,13 @@ For example: The message of the day, shown below each server entry in the UI, can be changed with the `MOTD` environment variable, such as - docker run -d -e 'MOTD=My Server' ... + -e MOTD="My Server" If you leave it off, a default is computed from the server type and version, such as A Paper Minecraft Server powered by Docker -when `TYPE` is `PAPER`. That way you can easily differentiate between several servers you may have started. - -_The example shows how to specify a server message of the day that contains spaces by putting quotes -around the whole thing._ +That way you can easily differentiate between several servers you may have started. ### PVP Mode @@ -1152,9 +1154,11 @@ For some cases, if e.g. after removing mods, it could be necessary to startup mi ### Enable Remote JMX for Profiling -To enable remote JMX, such as for profiling with VisualVM or JMC, add the environment variable `ENABLE_JMX=true` and add a port forwarding of TCP port 7091, such as: +To enable remote JMX, such as for profiling with VisualVM or JMC, add the environment variable `ENABLE_JMX=true`, set `JMX_HOST` to the IP/host running the Docker container, and add a port forwarding of TCP port 7091, such as: - -e ENABLE_JMX=true -p 7091:7091 +``` +-e ENABLE_JMX=true -e JMX_HOST=$HOSTNAME -p 7091:7091 +``` ### Enable Aikar's Flags diff --git a/examples/docker-compose-curseforge.yml b/examples/docker-compose-curseforge.yml index fbdd8c89..50c748c4 100644 --- a/examples/docker-compose-curseforge.yml +++ b/examples/docker-compose-curseforge.yml @@ -2,7 +2,7 @@ version: '3.2' services: mc: - image: itzg/minecraft-server + image: itzg/minecraft-server:java8 volumes: - ./modpacks:/modpacks:ro environment: diff --git a/examples/docker-compose-curseinstance.yml b/examples/docker-compose-curseinstance.yml deleted file mode 100644 index c1d62f7f..00000000 --- a/examples/docker-compose-curseinstance.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: "3.7" - -services: - mc: - image: itzg/minecraft-server - ports: - - 25565:25565 - volumes: - # Attach .../Curse/Minecraft/Instances for use at /instances - - ./Instances:/instances:ro - # Attach /data as usual - - ./ServerData:/data - environment: - EULA: "TRUE" - # Modpacks generally need more memory, so let's give at 2 GB - MEMORY: 2G - # Use new CURSE_INSTANCE type - TYPE: CURSE_INSTANCE - # Reference directory of or full path to minecraftinstance.json - CURSE_INSTANCE_JSON: /instances/FTB Presents SkyFactory 3 diff --git a/examples/docker-compose-forge.yml b/examples/docker-compose-forge.yml index 4c9f6c86..2e2a5d59 100644 --- a/examples/docker-compose-forge.yml +++ b/examples/docker-compose-forge.yml @@ -2,7 +2,7 @@ version: "3.7" services: mc: - image: itzg/minecraft-server + image: itzg/minecraft-server:java8 ports: # expose the Minecraft server port outside of container - 25565:25565 diff --git a/examples/docker-compose-ftba.yml b/examples/docker-compose-ftba.yml index 6e07bbbc..81019b59 100644 --- a/examples/docker-compose-ftba.yml +++ b/examples/docker-compose-ftba.yml @@ -2,8 +2,8 @@ version: "3.7" services: mc: - # FTBA support is only available in multiarch image tag - image: itzg/minecraft-server:multiarch + # FTBA support is only available in non-Alpine images + image: itzg/minecraft-server:java8-multiarch ports: # expose the Minecraft server port outside of container - 25565:25565 diff --git a/examples/docker-compose-spongeforge.yml b/examples/docker-compose-spongeforge.yml index 6843b64c..e8b6ae39 100644 --- a/examples/docker-compose-spongeforge.yml +++ b/examples/docker-compose-spongeforge.yml @@ -5,7 +5,7 @@ version: '3' services: minecraft: - image: itzg/minecraft-server + image: itzg/minecraft-server:java8 ports: - "25565:25565" volumes: diff --git a/start-configuration b/start-configuration index afa930d9..12a2ef93 100644 --- a/start-configuration +++ b/start-configuration @@ -54,7 +54,6 @@ if [[ $RCON_PASSWORD_FILE ]]; then log "" fi -export SERVER_PROPERTIES=/data/server.properties export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json case "X$VERSION" in diff --git a/start-deployMohist b/start-deployMohist index 1c67bd08..0cc96484 100644 --- a/start-deployMohist +++ b/start-deployMohist @@ -6,6 +6,7 @@ set -e isDebugging && set -x requireVar VANILLA_VERSION +: ${MOHIST_BUILD:=lastSuccessfulBuild} mohistJobs=https://ci.codemc.io/job/Mohist-Community/job/ mohistJob=${mohistJobs}Mohist-${VANILLA_VERSION}/ @@ -17,12 +18,12 @@ if ! curl -X HEAD -o /dev/null -fsSL "${mohistJob}"; then exit 1 fi -latestBuildRelPath=$( - curl -fsSL "${mohistJob}lastSuccessfulBuild/api/json" | +buildRelPath=$( + curl -fsSL "${mohistJob}${MOHIST_BUILD}/api/json" | jq -r '.artifacts[0].relativePath' ) -baseName=$(basename "${latestBuildRelPath}") +baseName=$(basename "${buildRelPath}") if [[ ${baseName} != *-server.jar* ]]; then log "ERROR: mohist build for ${VANILLA_VERSION} is not a valid server jar, found ${baseName}" log " check https://ci.codemc.io/job/Mohist-Community/ for available versions" @@ -34,7 +35,7 @@ export SERVER="/data/${baseName}" if [ ! -f ${SERVER} ]; then log "Downloading ${baseName}" - curl -o "${SERVER}" -fsSL "${mohistJob}lastSuccessfulBuild/artifact/${latestBuildRelPath}" + curl -o "${SERVER}" -fsSL "${mohistJob}${MOHIST_BUILD}/artifact/${buildRelPath}" fi export SKIP_LOG4J_CONFIG=true diff --git a/start-deployPaper b/start-deployPaper index 10a88d25..6058be2b 100644 --- a/start-deployPaper +++ b/start-deployPaper @@ -57,8 +57,9 @@ else fi log "Removing old PaperMC versions ..." - paperJarSearchString=${SERVER/$build/[0-9]*} - find . -maxdepth 1 -name "$paperJarSearchString" ! -name "$SERVER" -delete -print + for f in paper-*.jar; do + [[ $f != $SERVER ]] && rm $f + done log "Downloading PaperMC $VANILLA_VERSION (build $build) ..." curl -fsSL -o "$SERVER" "${zarg[@]}" \ diff --git a/start-finalSetupEnvVariables b/start-finalSetupEnvVariables index ab8d13c8..e1508576 100644 --- a/start-finalSetupEnvVariables +++ b/start-finalSetupEnvVariables @@ -5,7 +5,7 @@ : ${ENV_VARIABLE_PREFIX:=CFG_} if isTrue "${REPLACE_ENV_VARIABLES}"; then - log "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX..." + log "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX ..." # File excludes fileExcludes= @@ -22,28 +22,30 @@ if isTrue "${REPLACE_ENV_VARIABLES}"; then isDebugging && echo "Using find file exclusions: $fileExcludes" isDebugging && echo "Using find directory exclusions: $dirExcludes" - while IFS='=' read -r name value ; do + for name in $(compgen -v $ENV_VARIABLE_PREFIX); do # check if name of env variable matches the prefix # sanity check environment variables to avoid code injections - if [[ "$name" = $ENV_VARIABLE_PREFIX* ]] \ - && [[ $value =~ ^[0-9a-zA-Z_:/=?.+\-]*$ ]] \ - && [[ $name =~ ^[0-9a-zA-Z_\-]*$ ]]; then - # Read content from file environment - if [[ $name = *"_FILE" ]] && [[ -f $value ]]; then - name="${name/_FILE/}" - value=$(<$value) - fi - - log "Replacing $name with $value ..." - find /data/ \ - $dirExcludes \ - -type f \ - \( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \ - -or -name "*.conf" -or -name "*.properties" \) \ - $fileExcludes \ - -exec sed -i 's#${'"$name"'}#'"$value"'#g' {} \; + # Read content from file environment + if [[ $name = *"_FILE" ]]; then + value=$(<${!name}) + name="${name%_FILE}" + else + value=${!name} fi - done < <(env) + + log "Replacing $name with $value ..." + + value=${value//\\/\\\\} + value=${value//#/\\#} + + find /data/ \ + $dirExcludes \ + -type f \ + \( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \ + -or -name "*.conf" -or -name "*.properties" \) \ + $fileExcludes \ + -exec sed -i 's#${'"$name"'}#'"$value"'#g' {} \; + done fi exec ${SCRIPTS:-/}start-minecraftFinalSetup $@ diff --git a/start-finalSetupServerProperties b/start-finalSetupServerProperties index 08f19bef..a4c7c62c 100644 --- a/start-finalSetupServerProperties +++ b/start-finalSetupServerProperties @@ -2,6 +2,8 @@ . ${SCRIPTS:-/}start-utils +: ${SERVER_PROPERTIES:=/data/server.properties} + # FUNCTIONS function setServerProp { local prop=$1 @@ -12,10 +14,15 @@ function setServerProp { TRUE|FALSE) var=${var,,} ;; esac - log "Setting ${prop} to '${var}' in ${SERVER_PROPERTIES}" - sed -i "/^${prop}\s*=/ c ${prop}=${var//\\/\\\\}" "$SERVER_PROPERTIES" + if grep "${prop}" "$SERVER_PROPERTIES" > /dev/null; then + log "Setting ${prop} to '${var}' in ${SERVER_PROPERTIES}" + sed -i "/^${prop}\s*=/ c ${prop}=${var//\\/\\\\}" "$SERVER_PROPERTIES" + else + log "Adding ${prop} with '${var}' in ${SERVER_PROPERTIES}" + echo "${prop}=${var//\\/\\\\}" >> "$SERVER_PROPERTIES" + fi else - log "Skip setting ${prop}" + isDebugging && log "Skip setting ${prop}" fi } diff --git a/start-minecraftFinalSetup b/start-minecraftFinalSetup index 3a2d1df1..d630d3a9 100644 --- a/start-minecraftFinalSetup +++ b/start-minecraftFinalSetup @@ -84,7 +84,6 @@ if [ -n "$JVM_DD_OPTS" ]; then fi if isTrue ${ENABLE_JMX}; then - : ${JMX_HOST:=0.0.0.0} : ${JMX_PORT:=7091} JVM_OPTS="${JVM_OPTS} -Dcom.sun.management.jmxremote.local.only=false @@ -92,8 +91,8 @@ if isTrue ${ENABLE_JMX}; then -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false - -Dcom.sun.management.jmxremote.host=${JMX_HOST} - -Djava.rmi.server.hostname=${JMX_HOST}" + -Dcom.sun.management.jmxremote.host=${JMX_BINDING:-0.0.0.0} + -Djava.rmi.server.hostname=${JMX_HOST:-localhost}" log "JMX is enabled. Make sure you have port forwarding for ${JMX_PORT}" fi