Browse Source

Docker stop now: warns, saves, and stops Minecraft

Steve Thielemann 7 years ago
parent
commit
da21073e7d
3 changed files with 43 additions and 18 deletions
  1. 7 5
      data/server.properties
  2. 9 12
      mc-java/Dockerfile
  3. 27 1
      mc-java/launch.sh

+ 7 - 5
data/server.properties

@@ -1,5 +1,5 @@
 #Minecraft server properties
-#Tue Oct 17 00:20:03 GMT 2017
+#Tue Feb 20 04:37:42 GMT 2018
 spawn-protection=16
 max-tick-time=60000
 query.port=25565
@@ -11,10 +11,12 @@ enable-query=false
 player-idle-timeout=0
 difficulty=1
 spawn-monsters=true
+broadcast-rcon-to-ops=true
 op-permission-level=4
 pvp=false
 snooper-enabled=true
 level-type=CUSTOMIZED
+rcon.ip=
 hardcore=false
 enable-command-block=true
 max-players=16
@@ -33,12 +35,12 @@ view-distance=10
 resource-pack=
 spawn-animals=true
 white-list=false
-rcon.password=
+rcon.password=mindcraft
 generate-structures=true
-online-mode=false
 max-build-height=256
+online-mode=false
 level-seed=
-use-native-transport=true
 prevent-proxy-connections=false
+use-native-transport=true
+enable-rcon=true
 motd=Bugz server (Paper) WOOT\!
-enable-rcon=false

+ 9 - 12
mc-java/Dockerfile

@@ -1,25 +1,22 @@
 FROM openjdk:8-jre-alpine
 
-ADD launch.sh /launch-minecraft.sh
-# ADD MCRcon/demo.py /demo.py
-# ADD MCRcon/mcrcon.py /mcrcon.py
-
 WORKDIR /home/minecraft
 # ADD launch.sh /home/minecraft/launch.sh
-# ADD start-minecraft.sh /home/minecraft/start-minecraft.sh
-# ADD base.properties /home/minecraft/base.properties
 # ADD https://github.com/itzg/rcon-cli/releases/download/1.3/rcon-cli_linux_amd64 /usr/local/bin/rcon-cli
 
-# Ok, but I can do better with some python scripts.  :D
-# ADD ./rcon-cli_linux_amd64 /usr/local/bin/rcon-cli
+# This allows me to talk to Minecraft server
+ADD ./rcon-cli_linux_amd64 /usr/local/bin/rcon-cli
 
-RUN apk add --no-cache su-exec python python-dev py2-pip tini bash \
+# RUN apk add --no-cache su-exec python python-dev py2-pip tini bash \
+RUN apk add --no-cache su-exec python python-dev py2-pip bash \
 && addgroup -g 1000 minecraft \
 && adduser -D -u 1000 -G minecraft -h /home/minecraft minecraft \
 && pip install mcstatus \
 && apk del python-dev \
 && rm -rf /var/cache/apk/* 
 
+ADD launch.sh /launch.sh
+
 # && chown minecraft:minecraft /home/minecraft/*
 
 # Oddly, mcstatus localhost ping fails/unable to resolve hostname.  
@@ -29,9 +26,9 @@ HEALTHCHECK CMD mcstatus 127.0.0.1 ping
 EXPOSE 25565 25575
 
 VOLUME ["/home/minecraft"]
-ENTRYPOINT [ "tini", "--" ]
-# CMD ["/home/minecraft/launch.sh"]
-CMD ["/launch-minecraft.sh"]
+# ENTRYPOINT [ "tini", "--" ]
+# CMD ["/launch-minecraft.sh"]
+CMD ["/launch.sh"]
 
 ENV UID=1000 GIU=1000 \
   SERVER=server.jar \

+ 27 - 1
mc-java/launch.sh

@@ -54,5 +54,31 @@ JVM_OPTS="-Xms${INIT_MEMORY:-${MEMORY}} -Xmx${MAX_MEMORY:-${MEMORY}} ${JVM_OPTS}
 
 echo "Switching to user 'minecraft' and launching $SERVER"
 
-su-exec minecraft java $JVM_XX_OPTS $JVM_OPTS $STARTUP -jar $SERVER "$@" $EXTRA_ARGS
+# start in the backround
+
+su-exec minecraft java $JVM_XX_OPTS $JVM_OPTS $STARTUP -jar $SERVER "$@" $EXTRA_ARGS &
+MC_PID=$!
+echo "Minecraft running pid $MC_PID ..."
+
+RCON="rcon-cli --port 25575 --password mindcraft"
+
+save_shutdown() {
+  echo "Received TERM..."
+  echo "Warning users"
+  $RCON say "Saving and Shutting down Minecraft now"
+  sleep 1
+  echo "Saving..."
+  $RCON save-all
+  sleep 1
+  echo "Stop..."
+  $RCON stop
+  wait $MC_PID
+}
+
+# Ok, trap TERM
+trap save_shutdown TERM
+echo "Waiting for Minecraft ($MC_PID)..."
+wait $MC_PID
+
+echo "Minecraft is shutdown."