Compare commits

..

54 Commits

Author SHA1 Message Date
Geoff Bourne
a609305fc3 Auto-merging via docker-versions-create 2021-02-27 20:53:57 -06:00
Geoff Bourne
861aec6bd6 Added option for MOHIST_BUILD
#781
2021-02-27 20:37:59 -06:00
Geoff Bourne
53f5fbb77f docs: Fixed examples of quoting SEED and MOTD
#782
2021-02-27 11:05:16 -06:00
Geoff Bourne
9299f00d20 Pre-process special characters in REPLACE_ENV_VARIABLES
#718
2021-02-25 19:07:16 -06:00
Geoff Bourne
e5e97a3560 Use file to speed up removal of old PaperMC server jars
#779
2021-02-23 20:04:34 -06:00
Geoff Bourne
32bc0382d6 Only show skipped properties when debugging 2021-02-21 14:36:03 -06:00
Geoff Bourne
fa53abdfb7 Add missing server.properties when needed
#776
2021-02-21 14:32:41 -06:00
Geoff Bourne
0cbfb81b4c misc: Removed debug 2021-02-20 17:35:26 -06:00
Geoff Bourne
d47c801b18 Separated JMX_BINDING from JMX_HOST in ENABLE_JMX usage 2021-02-20 17:34:00 -06:00
Geoff Bourne
c056b9d2dd Improved handling of ENV_VARIABLE_PREFIX
#718
2021-02-20 17:30:50 -06:00
Geoff Bourne
92a15ea85d Updated forge examples to use java8 image
#770
2021-02-15 10:21:42 -06:00
Fersandi Pratama
6fe022ccc8 Fix README: volume should be in list (#767) 2021-02-13 12:24:58 -06:00
Geoff Bourne
b71eb666a7 Fix PATH to include java when needed
#749
2021-02-10 15:11:07 -06:00
Geoff Bourne
c47c28a211 Merge branch 'master' into openj9 2021-02-10 14:54:54 -06:00
Geoff Bourne
a2ab0d75ed Fix PATH to include java when needed 2021-02-10 14:46:09 -06:00
Geoff Bourne
b2aeaa0b51 Auto-merging via docker-versions-create 2021-02-10 14:02:35 -06:00
Geoff Bourne
c3711e5240 Auto-merging via docker-versions-create
CONFLICT (content): Merge conflict in Dockerfile
2021-02-07 18:08:12 -06:00
Geoff Bourne
895bbd713e Auto-merging docker-versions-create.sh
CONFLICT (content): Merge conflict in Dockerfile
CONFLICT (add/add): Merge conflict in .github/workflows/build-multiarch.yml
2021-02-07 09:10:34 -06:00
Geoff Bourne
a3542e9e0b Auto-merging via docker-versions-create 2021-01-29 21:03:36 -06:00
Geoff Bourne
23c0cd3017 Auto-merging via docker-versions-create 2021-01-12 17:25:45 -06:00
Geoff Bourne
84bc92975c Auto-merging via docker-versions-create 2021-01-09 11:20:26 -06:00
Geoff Bourne
5739b74aa3 Auto-merging via docker-versions-create 2021-01-06 22:02:46 -06:00
Geoff Bourne
796d2238da Auto-merging via docker-versions-create 2020-12-27 22:05:17 -06:00
Geoff Bourne
d919881092 Auto-merging via docker-versions-create 2020-12-19 08:23:58 -06:00
Geoff Bourne
e406fee8fa Auto-merging via docker-versions-create 2020-12-15 13:59:46 -06:00
Geoff Bourne
3497b06391 Auto-merging via docker-versions-create 2020-11-25 15:53:49 -06:00
Geoff Bourne
65b0e0d8bb Auto-merging via docker-versions-create 2020-08-09 13:06:24 -05:00
Geoff Bourne
c5b9c199d6 Auto-merging via docker-versions-create 2020-07-26 08:29:13 -05:00
Geoff Bourne
5a61465c09 ci: Migrated main build and test back to Hub 2020-07-26 08:28:40 -05:00
Geoff Bourne
8a324c30de Auto-merging via docker-versions-create 2020-07-18 18:39:40 -05:00
Geoff Bourne
e0cdf9e2ce Auto-merging via docker-versions-create 2020-07-11 13:12:41 -05:00
Geoff Bourne
57740cb749 Auto-merging via docker-versions-create 2020-07-10 17:10:43 -05:00
Geoff Bourne
966c74cd08 Auto-merging via docker-versions-create 2020-07-04 14:57:07 -05:00
Geoff Bourne
d84b58dfd0 Auto-merging via docker-versions-create 2020-06-20 15:44:09 -05:00
Geoff Bourne
7aaf106ffe Auto-merging via docker-versions-create
# Conflicts:
#	.circleci/config.yml
2020-06-19 13:25:41 -05:00
Geoff Bourne
5f77902441 Auto-merging via docker-versions-create 2020-05-20 08:14:14 -05:00
Geoff Bourne
c200efc9c9 Auto-merging via docker-versions-create 2020-05-02 09:33:49 -05:00
Geoff Bourne
e924126a56 Auto-merging via docker-versions-create 2020-04-25 12:10:22 -05:00
Geoff Bourne
bbd3d3cfc1 Auto-merging via docker-versions-create 2020-04-17 21:28:25 -05:00
Geoff Bourne
d77c19c69b Auto-merging via docker-versions-create 2020-04-11 08:51:36 -05:00
Geoff Bourne
7ee77e4f47 Auto-merging via docker-versions-create 2020-04-10 11:08:41 -05:00
Geoff Bourne
84d0cff4c8 Auto-merging via docker-versions-create 2020-04-03 13:31:30 -05:00
Geoff Bourne
70519b9764 Auto-merging via docker-versions-create
# Conflicts:
#	README.md
#	start-minecraftFinalSetup
2020-04-03 13:28:27 -05:00
Geoff Bourne
4683ea496d Auto-merging via docker-versions-create 2020-04-02 17:47:30 -05:00
Geoff Bourne
0e3a82f9d3 Auto-merging via docker-versions-create 2020-03-30 08:31:53 -05:00
Geoff Bourne
d2554f2271 Auto-merging via docker-versions-create 2020-03-26 20:54:00 -05:00
Geoff Bourne
55e62371ac Auto-merging via docker-versions-create 2020-02-01 08:52:51 -06:00
Geoff Bourne
c9a5fcfac8 Auto-merging via docker-versions-create 2020-01-17 08:29:05 -06:00
Geoff Bourne
a1f8154d05 Auto-merging via docker-versions-create 2019-11-16 09:30:54 -06:00
Geoff Bourne
e5d0a9362a Auto-merging via docker-versions-create 2019-11-16 09:04:17 -06:00
Geoff Bourne
ca9c280b0b Merge branch 'master' into openj9 2019-11-16 09:01:17 -06:00
Geoff Bourne
6ef4e984c7 ci: disable cross-building arm-v7 image 2019-08-13 20:06:57 -05:00
Geoff Bourne
ea4f78346a ci: try cross-building arm-v7 image 2019-08-13 20:04:34 -05:00
Geoff Bourne
007f9426bf Switch to OpenJ9 base image (#360)
(cherry picked from commit 93197ffb77)
2019-08-10 18:56:36 -05:00
14 changed files with 129 additions and 73 deletions

25
.circleci/config.yml Normal file
View File

@@ -0,0 +1,25 @@
version: 2
jobs:
minecraft_server:
docker:
- image: circleci/buildpack-deps:stable
steps:
- checkout
- setup_remote_docker
- run:
name: Build image
command: docker build -t itzg/minecraft-server:${CIRCLE_BRANCH} .
# - run:
# name: Build arm v7 image
# command: docker build -t itzg/minecraft-server:${CIRCLE_BRANCH}-arm-v7 --platform linux/arm/v7 --build-arg ARCH=armv7 .
workflows:
version: 2
build:
jobs:
- minecraft_server:
filters:
branches:
ignore:
- armv7
- multiarch

View File

@@ -1,4 +1,4 @@
FROM openjdk:8u212-jre-alpine
FROM adoptopenjdk/openjdk8-openj9:alpine
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
@@ -70,7 +70,7 @@ COPY log4j2.xml /tmp/log4j2.xml
WORKDIR /data
ENV UID=1000 GID=1000 \
JVM_XX_OPTS="-XX:+UseG1GC" MEMORY="1G" \
MEMORY="1G" \
TYPE=VANILLA VERSION=LATEST \
ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
SERVER_PORT=25565 ONLINE_MODE=TRUE SERVER_NAME="Dedicated Server" \

View File

@@ -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
@@ -1150,11 +1152,21 @@ via a `JVM_XX_OPTS` environment variable.
For some cases, if e.g. after removing mods, it could be necessary to startup minecraft with an additional `-D` parameter like `-Dfml.queryResult=confirm`. To address this you can use the environment variable `JVM_DD_OPTS`, which builds the params from a given list of values separated by space, but without the `-D` prefix. To make things running under systems (e.g. Plesk), which doesn't allow `=` inside values, a `:` (colon) could be used instead. The upper example would look like this:
`JVM_DD_OPTS=fml.queryResult:confirm`, and will be converted to `-Dfml.queryResult=confirm`.
The container uses [OpenJ9](https://www.eclipse.org/openj9/docs) and a couple of J9 options are
simplified by environment variables:
- `-e TUNE_VIRTUALIZED=TRUE` : enables the option to
[optimize for virtualized environments](https://www.eclipse.org/openj9/docs/xtunevirtualized/)
- `-e TUNE_NURSERY_SIZES=TRUE` : configures nursery sizes where the initial size is 50%
of the `MAX_MEMORY` and the max size is 80%.
### 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

View File

@@ -2,7 +2,7 @@ version: '3.2'
services:
mc:
image: itzg/minecraft-server
image: itzg/minecraft-server:java8
volumes:
- ./modpacks:/modpacks:ro
environment:

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -5,7 +5,7 @@ version: '3'
services:
minecraft:
image: itzg/minecraft-server
image: itzg/minecraft-server:java8
ports:
- "25565:25565"
volumes:

View File

@@ -61,7 +61,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
@@ -101,6 +100,10 @@ case "${TYPE^^}" in
;;
FORGE)
log "**********************************************************************"
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
log " since some mods require Java 8"
log "**********************************************************************"
exec ${SCRIPTS:-/}start-deployForge "$@"
;;
@@ -109,6 +112,10 @@ case "${TYPE^^}" in
;;
FTB|CURSEFORGE)
log "**********************************************************************"
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
log " since some mods require Java 8"
log "**********************************************************************"
exec ${SCRIPTS:-/}start-deployCF "$@"
;;

View File

@@ -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

View File

@@ -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[@]}" \

View File

@@ -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 $@

View File

@@ -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
}

View File

@@ -83,8 +83,24 @@ if [ -n "$JVM_DD_OPTS" ]; then
done
fi
if isTrue ${TUNE_VIRTUALIZED}; then
JVM_XX_OPTS="${JVM_XX_OPTS} -Xtune:virtualized"
fi
if isTrue ${TUNE_NURSERY_SIZES}; then
case ${MAX_MEMORY^^} in
*G)
MAX_MEMORY_MB=$(( ${MAX_MEMORY%?} * 1024 )) ;;
*M)
MAX_MEMORY_MB=${MAX_MEMORY%?} ;;
esac
NURSERY_MINIMUM=$(( ${MAX_MEMORY_MB} / 2 ))
NURSERY_MAXIMUM=$(( ${MAX_MEMORY_MB} * 4/5 ))
JVM_XX_OPTS="${JVM_XX_OPTS} -Xmns${NURSERY_MINIMUM}M -Xmnx${NURSERY_MAXIMUM}M"
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 +108,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
@@ -168,6 +184,11 @@ function copyFilesForCurseForge() {
cp -f /data/eula.txt "${FTB_DIR}/"
}
if ! which java > /dev/null; then
log "Fixing PATH to include java"
PATH="${PATH}:/opt/java/openjdk/bin"
fi
mcServerRunnerArgs="--stop-duration ${STOP_DURATION:-60}s"
if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
if isTrue ${DEBUG_EXEC}; then