Add support for download of world in zipfile

WORLD=http://hostname/world.zip
Zipfile should contain world/ directory, and optionally any required mods in mods/ as well as optionally
a default server.properties file (overwritten by any env vars)
Also export volumes /mods and /config, the contents of which are copied to /data/mods and /data/config.  This
allows shared read-only mounts for modules without affecting world.
This commit is contained in:
Steve 2015-12-19 15:32:29 +13:00
parent 0acedd04b9
commit ef34025dd8
2 changed files with 31 additions and 2 deletions

View File

@ -12,7 +12,9 @@ RUN wget -O /usr/bin/jsawk https://github.com/micha/jsawk/raw/master/jsawk
RUN chmod +x /usr/bin/jsawk
RUN useradd -M -s /bin/false --uid 1000 minecraft \
&& mkdir /data \
&& chown minecraft:minecraft /data
&& mkdir /config \
&& mkdir /mods \
&& chown minecraft:minecraft /data /config /mods
EXPOSE 25565
@ -20,6 +22,8 @@ COPY start.sh /start
COPY start-minecraft.sh /start-minecraft
VOLUME ["/data"]
VOLUME ["/mods"]
VOLUME ["/config"]
COPY server.properties /tmp/server.properties
WORKDIR /data
@ -32,4 +36,4 @@ ENV UID=1000
ENV MOTD A Minecraft Server Powered by Docker
ENV JVM_OPTS -Xmx1024M -Xms1024M
ENV TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED LEVEL=world PVP=true DIFFICULTY=easy \
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS=
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD=

View File

@ -86,6 +86,14 @@ case $TYPE in
esac
# If supplied with a URL for a world, download it and unpack
case "X$WORLD" in
Xhttp*)
wget -q -O - $WORLD > /data/world.zip
unzip /data/world.zip
;;
esac
if [ ! -e server.properties ]; then
cp /tmp/server.properties .
@ -193,4 +201,21 @@ if [ -n "$ICON" -a ! -e server-icon.png ]; then
fi
fi
# If any modules have been provided, copy them over
[ -d /data/mods ] || mkdir /data/mods
for m in /mods/*.jar
do
if [ -f "$m" ]; then
cp $m /data/mods
fi
done
[ -d /data/config ] || mkdir /data/config
for c in /config/*
do
if [ -f "$c" ]; then
cp -r $c /data/config
fi
done
exec java $JVM_OPTS -jar $SERVER