mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-03-18 04:25:58 +00:00
Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a179f5f7ba | ||
|
|
f2955bcc2f | ||
|
|
a0c1ed88d1 | ||
|
|
de6d7a64ac | ||
|
|
3bf560bfbe | ||
|
|
f1b58323d3 | ||
|
|
d4a888073b | ||
|
|
54844930bb | ||
|
|
b26714c9c1 | ||
|
|
f03a8f0edc | ||
|
|
048beefadc | ||
|
|
de3545e8d9 | ||
|
|
e766301d1e | ||
|
|
3348083424 | ||
|
|
1e0183a3b1 | ||
|
|
fd0500feb2 | ||
|
|
e86138cdf2 | ||
|
|
ddb69ced3b | ||
|
|
c48f85cc4f | ||
|
|
aa13deecdb | ||
|
|
4c0f24613c | ||
|
|
b5bcea7d61 | ||
|
|
76d4fd1bbc | ||
|
|
f7523eef4e | ||
|
|
c38bfb22cc | ||
|
|
8cea619c13 | ||
|
|
e570ac8715 | ||
|
|
d14d666e24 | ||
|
|
8956d43c47 | ||
|
|
911fcf8b42 | ||
|
|
3e61c8084f | ||
|
|
fe6e8c04ff | ||
|
|
f1293ff979 | ||
|
|
5c5b8cd999 | ||
|
|
074424a5bd | ||
|
|
99b1de0bbd |
@@ -2,9 +2,9 @@ FROM java:openjdk-8u72-jdk
|
|||||||
|
|
||||||
MAINTAINER itzg
|
MAINTAINER itzg
|
||||||
|
|
||||||
ENV CASSANDRA_VERSION 2.2.6
|
ENV CASSANDRA_VERSION 2.2.8
|
||||||
|
|
||||||
RUN wget -qO /tmp/apache-cassandra.tgz http://mirrors.ibiblio.org/apache/cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz
|
ADD http://mirrors.ibiblio.org/apache/cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz /tmp/apache-cassandra.tgz
|
||||||
RUN tar -C /opt -zxf /tmp/apache-cassandra.tgz && \
|
RUN tar -C /opt -zxf /tmp/apache-cassandra.tgz && \
|
||||||
rm /tmp/apache-cassandra.tgz
|
rm /tmp/apache-cassandra.tgz
|
||||||
|
|
||||||
|
|||||||
@@ -2,20 +2,22 @@ FROM java:8u92-jre-alpine
|
|||||||
|
|
||||||
MAINTAINER itzg
|
MAINTAINER itzg
|
||||||
|
|
||||||
ENV ES_VERSION=2.3.4
|
RUN apk -U add bash
|
||||||
|
|
||||||
ADD https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/$ES_VERSION/elasticsearch-$ES_VERSION.tar.gz /tmp/es.tgz
|
ENV ES_VERSION=5.0.1
|
||||||
|
|
||||||
|
ADD https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$ES_VERSION.tar.gz /tmp/es.tgz
|
||||||
RUN cd /usr/share && \
|
RUN cd /usr/share && \
|
||||||
tar xf /tmp/es.tgz && \
|
tar xf /tmp/es.tgz && \
|
||||||
rm /tmp/es.tgz
|
rm /tmp/es.tgz
|
||||||
|
|
||||||
ADD start /start
|
|
||||||
|
|
||||||
EXPOSE 9200 9300
|
EXPOSE 9200 9300
|
||||||
|
|
||||||
ENV ES_HOME=/usr/share/elasticsearch-$ES_VERSION \
|
ENV ES_HOME=/usr/share/elasticsearch-$ES_VERSION \
|
||||||
OPTS=-Dnetwork.host=_non_loopback_ \
|
DEFAULT_ES_USER=elasticsearch \
|
||||||
DEFAULT_ES_USER=elasticsearch
|
DISCOVER_TRANSPORT_IP=eth0 \
|
||||||
|
DISCOVER_HTTP_IP=eth0 \
|
||||||
|
ES_JAVA_OPTS="-Xms1g -Xmx1g"
|
||||||
|
|
||||||
RUN adduser -S -s /bin/sh $DEFAULT_ES_USER
|
RUN adduser -S -s /bin/sh $DEFAULT_ES_USER
|
||||||
|
|
||||||
@@ -23,4 +25,7 @@ VOLUME ["/data","/conf"]
|
|||||||
|
|
||||||
WORKDIR $ES_HOME
|
WORKDIR $ES_HOME
|
||||||
|
|
||||||
|
COPY start /start
|
||||||
|
COPY log4j2.properties $ES_HOME/config/
|
||||||
|
|
||||||
CMD ["/start"]
|
CMD ["/start"]
|
||||||
|
|||||||
@@ -49,7 +49,19 @@ and then check the cluster health, such as http://192.168.99.100:9200/_cluster/h
|
|||||||
"unassigned_shards" : 0
|
"unassigned_shards" : 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Configuration
|
# Configuration Summary
|
||||||
|
|
||||||
|
## Ports
|
||||||
|
|
||||||
|
* `9200` - HTTP REST
|
||||||
|
* `9300` - Native transport
|
||||||
|
|
||||||
|
## Volumes
|
||||||
|
|
||||||
|
* `/data` - location of `path.data`
|
||||||
|
* `/conf` - location of `path.conf`
|
||||||
|
|
||||||
|
# Configuration Details
|
||||||
|
|
||||||
The following configuration options are specified using `docker run` environment variables (`-e`) like
|
The following configuration options are specified using `docker run` environment variables (`-e`) like
|
||||||
|
|
||||||
@@ -169,3 +181,33 @@ The minimum, which can be calculated as `(master_eligible_nodes / 2) + 1`, can b
|
|||||||
Using the Docker Compose file above, a value of `2` is appropriate when scaling the cluster to 3 master nodes:
|
Using the Docker Compose file above, a value of `2` is appropriate when scaling the cluster to 3 master nodes:
|
||||||
|
|
||||||
docker-compose scale master=3
|
docker-compose scale master=3
|
||||||
|
|
||||||
|
## Auto transport/http discovery with Swarm Mode
|
||||||
|
|
||||||
|
When using Docker Swarm mode (starting with 1.12), the overlay and ingress network interfaces are assigned
|
||||||
|
multiple IP addresses. As a result, it creates confusion for the transport publish logic even when using
|
||||||
|
the special value `_eth0_`.
|
||||||
|
|
||||||
|
To resolve this, add
|
||||||
|
|
||||||
|
-e DISCOVER_TRANSPORT_IP=eth0
|
||||||
|
|
||||||
|
replacing `eth0` with another interface within the container, if needed.
|
||||||
|
|
||||||
|
The same can be done for publish/binding of the http module by adding:
|
||||||
|
|
||||||
|
-e DISCOVERY_HTTP_IP=eth2
|
||||||
|
|
||||||
|
## Heap size and other JVM options
|
||||||
|
|
||||||
|
By default this image will run Elasticsearch with a Java heap size of 1 GB. If that value
|
||||||
|
or any other JVM options need to be adjusted, then replace the `ES_JAVA_OPTS`
|
||||||
|
environment variable.
|
||||||
|
|
||||||
|
For example, this would allow for the use of 16 GB of heap:
|
||||||
|
|
||||||
|
-e ES_JAVA_OPTS="-Xms16g -Xmx16g"
|
||||||
|
|
||||||
|
Refer to [this page](https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html)
|
||||||
|
for more information about why both the minimum and maximum sizes were set to
|
||||||
|
the same value.
|
||||||
|
|||||||
74
elasticsearch/log4j2.properties
Normal file
74
elasticsearch/log4j2.properties
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
status = error
|
||||||
|
|
||||||
|
# log action execution errors for easier debugging
|
||||||
|
logger.action.name = org.elasticsearch.action
|
||||||
|
logger.action.level = debug
|
||||||
|
|
||||||
|
appender.console.type = Console
|
||||||
|
appender.console.name = console
|
||||||
|
appender.console.layout.type = PatternLayout
|
||||||
|
appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
|
||||||
|
|
||||||
|
appender.rolling.type = RollingFile
|
||||||
|
appender.rolling.name = rolling
|
||||||
|
appender.rolling.fileName = ${sys:es.logs}.log
|
||||||
|
appender.rolling.layout.type = PatternLayout
|
||||||
|
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.10000m%n
|
||||||
|
appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log
|
||||||
|
appender.rolling.policies.type = Policies
|
||||||
|
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
|
||||||
|
appender.rolling.policies.time.interval = 1
|
||||||
|
appender.rolling.policies.time.modulate = true
|
||||||
|
|
||||||
|
rootLogger.level = info
|
||||||
|
rootLogger.appenderRef.console.ref = console
|
||||||
|
#rootLogger.appenderRef.rolling.ref = rolling
|
||||||
|
|
||||||
|
appender.deprecation_rolling.type = RollingFile
|
||||||
|
appender.deprecation_rolling.name = deprecation_rolling
|
||||||
|
appender.deprecation_rolling.fileName = ${sys:es.logs}_deprecation.log
|
||||||
|
appender.deprecation_rolling.layout.type = PatternLayout
|
||||||
|
appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.10000m%n
|
||||||
|
appender.deprecation_rolling.filePattern = ${sys:es.logs}_deprecation-%i.log.gz
|
||||||
|
appender.deprecation_rolling.policies.type = Policies
|
||||||
|
appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
|
||||||
|
appender.deprecation_rolling.policies.size.size = 1GB
|
||||||
|
appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy
|
||||||
|
appender.deprecation_rolling.strategy.max = 4
|
||||||
|
|
||||||
|
logger.deprecation.name = org.elasticsearch.deprecation
|
||||||
|
logger.deprecation.level = warn
|
||||||
|
#logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
|
||||||
|
logger.deprecation.additivity = false
|
||||||
|
|
||||||
|
appender.index_search_slowlog_rolling.type = RollingFile
|
||||||
|
appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
|
||||||
|
appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log
|
||||||
|
appender.index_search_slowlog_rolling.layout.type = PatternLayout
|
||||||
|
appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.10000m%n
|
||||||
|
appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log
|
||||||
|
appender.index_search_slowlog_rolling.policies.type = Policies
|
||||||
|
appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
|
||||||
|
appender.index_search_slowlog_rolling.policies.time.interval = 1
|
||||||
|
appender.index_search_slowlog_rolling.policies.time.modulate = true
|
||||||
|
|
||||||
|
logger.index_search_slowlog_rolling.name = index.search.slowlog
|
||||||
|
logger.index_search_slowlog_rolling.level = trace
|
||||||
|
logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = console
|
||||||
|
logger.index_search_slowlog_rolling.additivity = false
|
||||||
|
|
||||||
|
appender.index_indexing_slowlog_rolling.type = RollingFile
|
||||||
|
appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
|
||||||
|
appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log
|
||||||
|
appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
|
||||||
|
appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.10000m%n
|
||||||
|
appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
|
||||||
|
appender.index_indexing_slowlog_rolling.policies.type = Policies
|
||||||
|
appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
|
||||||
|
appender.index_indexing_slowlog_rolling.policies.time.interval = 1
|
||||||
|
appender.index_indexing_slowlog_rolling.policies.time.modulate = true
|
||||||
|
|
||||||
|
logger.index_indexing_slowlog.name = index.indexing.slowlog.index
|
||||||
|
logger.index_indexing_slowlog.level = trace
|
||||||
|
logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = console
|
||||||
|
logger.index_indexing_slowlog.additivity = false
|
||||||
@@ -1,5 +1,98 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
pre_checks() {
|
||||||
|
mmc=$(sysctl vm.max_map_count|sed 's/.*= //')
|
||||||
|
if [[ $mmc -lt 262144 ]]; then
|
||||||
|
echo "
|
||||||
|
ERROR: As of 5.0.0 Elasticsearch requires increasing mmap counts.
|
||||||
|
Refer to https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
|
||||||
|
"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
discoverIpFromLink() {
|
||||||
|
dev=$1
|
||||||
|
mode=$2
|
||||||
|
ip=`ipaddr show dev $dev scope global|awk '$1 == "inet" { if (!match($2,"/32")) { gsub("/.*","",$2) ; print $2 } }'`
|
||||||
|
echo "Discovered $mode address $ip for $dev"
|
||||||
|
OPTS="$OPTS -E $mode.host=$ip"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_clustering() {
|
||||||
|
|
||||||
|
if [ -n "$CLUSTER" ]; then
|
||||||
|
OPTS="$OPTS -E cluster.name=$CLUSTER"
|
||||||
|
if [ -n "$CLUSTER_FROM" ]; then
|
||||||
|
if [ -d /data/$CLUSTER_FROM -a ! -d /data/$CLUSTER ]; then
|
||||||
|
echo "Performing cluster data migration from $CLUSTER_FROM to $CLUSTER"
|
||||||
|
mv /data/$CLUSTER_FROM /data/$CLUSTER
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$NODE_NAME" ]; then
|
||||||
|
OPTS="$OPTS -E node.name=$NODE_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$MULTICAST" ]; then
|
||||||
|
OPTS="$OPTS -E discovery.zen.ping.multicast.enabled=$MULTICAST"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$UNICAST_HOSTS" ]; then
|
||||||
|
OPTS="$OPTS -E discovery.zen.ping.unicast.hosts=$UNICAST_HOSTS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$PUBLISH_AS" ]; then
|
||||||
|
OPTS="$OPTS -E transport.publish_host=$(echo $PUBLISH_AS | awk -F: '{print $1}')"
|
||||||
|
OPTS="$OPTS -E transport.publish_port=$(echo $PUBLISH_AS | awk -F: '{if ($2) print $2; else print 9300}')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$MIN_MASTERS" ]; then
|
||||||
|
OPTS="$OPTS -E discovery.zen.minimum_master_nodes=$MIN_MASTERS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
install_plugins() {
|
||||||
|
|
||||||
|
if [ -n "$PLUGINS" ]; then
|
||||||
|
for p in $(echo $PLUGINS | awk -v RS=, '{print}')
|
||||||
|
do
|
||||||
|
echo "Installing the plugin $p"
|
||||||
|
$ES_HOME/bin/elasticsearch-plugin install $p
|
||||||
|
done
|
||||||
|
else
|
||||||
|
mkdir -p $ES_HOME/plugins
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_personality() {
|
||||||
|
|
||||||
|
if [ -n "$TYPE" ]; then
|
||||||
|
case $TYPE in
|
||||||
|
MASTER)
|
||||||
|
OPTS="$OPTS -E node.master=true -E node.data=false"
|
||||||
|
;;
|
||||||
|
|
||||||
|
GATEWAY)
|
||||||
|
OPTS="$OPTS -E node.master=false -E node.data=false"
|
||||||
|
;;
|
||||||
|
|
||||||
|
DATA|NON_MASTER)
|
||||||
|
OPTS="$OPTS -E node.master=false -E node.data=true"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Unknown node type. Please use MASTER|GATEWAY|DATA|NON_MASTER"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pre_checks
|
||||||
|
|
||||||
if [ -f /conf/env ]; then
|
if [ -f /conf/env ]; then
|
||||||
. /conf/env
|
. /conf/env
|
||||||
fi
|
fi
|
||||||
@@ -8,80 +101,23 @@ if [ ! -e /conf/elasticsearch.* ]; then
|
|||||||
cp $ES_HOME/config/elasticsearch.yml /conf
|
cp $ES_HOME/config/elasticsearch.yml /conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -e /conf/logging.* ]; then
|
if [ ! -e /conf/log4j2.properties ]; then
|
||||||
cp $ES_HOME/config/logging.yml /conf
|
cp $ES_HOME/config/log4j2.properties /conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
OPTS="$OPTS -Des.path.conf=/conf \
|
OPTS="$OPTS \
|
||||||
-Des.path.data=/data \
|
-E path.conf=/conf \
|
||||||
-Des.path.logs=/data \
|
-E path.data=/data \
|
||||||
-Des.transport.tcp.port=9300 \
|
-E path.logs=/data \
|
||||||
-Des.http.port=9200"
|
-E transport.tcp.port=9300 \
|
||||||
|
-E http.port=9200"
|
||||||
|
|
||||||
if [ -n "$CLUSTER" ]; then
|
discoverIpFromLink $DISCOVER_TRANSPORT_IP transport
|
||||||
OPTS="$OPTS -Des.cluster.name=$CLUSTER"
|
discoverIpFromLink $DISCOVER_HTTP_IP http
|
||||||
if [ -n "$CLUSTER_FROM" ]; then
|
|
||||||
if [ -d /data/$CLUSTER_FROM -a ! -d /data/$CLUSTER ]; then
|
|
||||||
echo "Performing cluster data migration from $CLUSTER_FROM to $CLUSTER"
|
|
||||||
mv /data/$CLUSTER_FROM /data/$CLUSTER
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$NODE_NAME" ]; then
|
setup_personality
|
||||||
OPTS="$OPTS -Des.node.name=$NODE_NAME"
|
setup_clustering
|
||||||
fi
|
install_plugins
|
||||||
|
|
||||||
if [ -n "$MULTICAST" ]; then
|
|
||||||
OPTS="$OPTS -Des.discovery.zen.ping.multicast.enabled=$MULTICAST"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$UNICAST_HOSTS" ]; then
|
|
||||||
OPTS="$OPTS -Des.discovery.zen.ping.unicast.hosts=$UNICAST_HOSTS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$PUBLISH_AS" ]; then
|
|
||||||
OPTS="$OPTS -Des.transport.publish_host=$(echo $PUBLISH_AS | awk -F: '{print $1}')"
|
|
||||||
OPTS="$OPTS -Des.transport.publish_port=$(echo $PUBLISH_AS | awk -F: '{if ($2) print $2; else print 9300}')"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$TYPE" ]; then
|
|
||||||
case $TYPE in
|
|
||||||
MASTER)
|
|
||||||
OPTS="$OPTS --node.master=true --node.data=false"
|
|
||||||
;;
|
|
||||||
|
|
||||||
GATEWAY)
|
|
||||||
OPTS="$OPTS --node.master=false --node.data=false"
|
|
||||||
;;
|
|
||||||
|
|
||||||
DATA|NON_MASTER)
|
|
||||||
OPTS="$OPTS --node.master=false --node.data=true"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "Unknown node type. Please use MASTER|GATEWAY|DATA|NON_MASTER"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$MIN_MASTERS" ]; then
|
|
||||||
OPTS="$OPTS --discovery.zen.minimum_master_nodes=$MIN_MASTERS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p /conf/plugins
|
|
||||||
OPTS="$OPTS --path.plugins=/conf/plugins"
|
|
||||||
|
|
||||||
if [ -n "$PLUGINS" ]; then
|
|
||||||
PLUGIN_OPTS="-Des.path.conf=/conf -Des.path.plugins=/conf/plugins"
|
|
||||||
for p in $(echo $PLUGINS | awk -v RS=, '{print}')
|
|
||||||
do
|
|
||||||
echo "Installing the plugin $p"
|
|
||||||
$ES_HOME/bin/plugin $PLUGIN_OPTS install $p -t 1m -b
|
|
||||||
done
|
|
||||||
else
|
|
||||||
mkdir -p /conf/plugins
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p /conf/scripts
|
mkdir -p /conf/scripts
|
||||||
|
|
||||||
@@ -89,8 +125,7 @@ echo "Starting Elasticsearch with the options $OPTS"
|
|||||||
CMD="$ES_HOME/bin/elasticsearch $OPTS"
|
CMD="$ES_HOME/bin/elasticsearch $OPTS"
|
||||||
if [ `id -u` = 0 ]; then
|
if [ `id -u` = 0 ]; then
|
||||||
echo "Running as non-root..."
|
echo "Running as non-root..."
|
||||||
chown -R $DEFAULT_ES_USER /data
|
chown -R $DEFAULT_ES_USER /data /conf
|
||||||
set -x
|
|
||||||
su -c "$CMD" $DEFAULT_ES_USER
|
su -c "$CMD" $DEFAULT_ES_USER
|
||||||
else
|
else
|
||||||
$CMD
|
$CMD
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
FROM java:openjdk-8u72-jdk
|
FROM java:openjdk-8u102-jdk
|
||||||
|
|
||||||
MAINTAINER itzg
|
MAINTAINER itzg
|
||||||
|
|
||||||
ADD download-and-start.sh /download-and-start
|
RUN apt-get update && \
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
graphviz \
|
||||||
|
&& apt-get clean
|
||||||
|
|
||||||
ENV JENKINS_HOME /data
|
ENV JENKINS_HOME=/data
|
||||||
VOLUME ["/data"]
|
|
||||||
|
VOLUME ["/data", "/root", "/opt/jenkins"]
|
||||||
EXPOSE 8080 38252
|
EXPOSE 8080 38252
|
||||||
|
|
||||||
CMD ["/download-and-start"]
|
COPY download-and-start.sh /opt/download-and-start
|
||||||
|
|
||||||
|
CMD ["/opt/download-and-start"]
|
||||||
|
|||||||
@@ -18,21 +18,6 @@ would be:
|
|||||||
|
|
||||||
ID=$(docker run -d -p 8080:8080 -v /SOME_HOST_DIR:/data itzg/jenkins
|
ID=$(docker run -d -p 8080:8080 -v /SOME_HOST_DIR:/data itzg/jenkins
|
||||||
|
|
||||||
# Entering the container to perform manual config
|
|
||||||
|
|
||||||
As with any Docker container, you can run a shell within the running container:
|
|
||||||
|
|
||||||
docker exec -it $ID bash
|
|
||||||
|
|
||||||
A more realistic example is installing git, openjdk-7-jdk, etc:
|
|
||||||
|
|
||||||
docker exec $ID apt-get update
|
|
||||||
docker exec $ID apt-get install -y git openjdk-7-jdk
|
|
||||||
|
|
||||||
and then Configure the JDK in Jenkins:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
# Enabling Jenkins slave agents
|
# Enabling Jenkins slave agents
|
||||||
|
|
||||||
By default, Jenkins will pick a random port to allow slave nodes launched
|
By default, Jenkins will pick a random port to allow slave nodes launched
|
||||||
@@ -47,3 +32,20 @@ Launch your Jenkins container using
|
|||||||
and configure the port in the Global Security settings:
|
and configure the port in the Global Security settings:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
# Image Parameters
|
||||||
|
|
||||||
|
## Volumes
|
||||||
|
|
||||||
|
* `/data` - a majority of the Jenkins content is maintained here, such as workspaces
|
||||||
|
* `/root` - some tools, such as Maven, utilize the home directory for default repository storage
|
||||||
|
* `/opt/jenkins` - the installed distribution is expanded here
|
||||||
|
|
||||||
|
## Ports
|
||||||
|
|
||||||
|
* `8080` - for the web UI
|
||||||
|
* `38252` - for slave incoming JMX access
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
* `JENKINS_OPTS` - passed to the initial Java invocation of Jenkins
|
||||||
|
|||||||
@@ -26,4 +26,4 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
cd /opt/jenkins
|
cd /opt/jenkins
|
||||||
exec java -jar jenkins.war
|
exec java $JENKINS_OPTS -jar jenkins.war
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
FROM itzg/ubuntu-openjdk-7
|
FROM openjdk:8u111-jre
|
||||||
|
|
||||||
MAINTAINER itzg
|
MAINTAINER itzg
|
||||||
|
|
||||||
ENV KIBANA_VERSION 4.1.1
|
ENV KIBANA_VERSION 5.0.0
|
||||||
|
|
||||||
RUN wget -q -O /tmp/kibana.tgz https://download.elasticsearch.org/kibana/kibana/kibana-${KIBANA_VERSION}-linux-x64.tar.gz
|
ADD https://artifacts.elastic.co/downloads/kibana/kibana-${KIBANA_VERSION}-linux-x86_64.tar.gz /tmp/kibana.tgz
|
||||||
|
|
||||||
RUN tar -C /opt -xzf /tmp/kibana.tgz && rm /tmp/kibana.tgz
|
RUN tar -C /opt -xzf /tmp/kibana.tgz && rm /tmp/kibana.tgz
|
||||||
ENV KIBANA_HOME /opt/kibana-$KIBANA_VERSION-linux-x64
|
|
||||||
|
ENV KIBANA_HOME /opt/kibana-$KIBANA_VERSION-linux-x86_64
|
||||||
|
|
||||||
# Simplify for cross-container
|
# Simplify for cross-container
|
||||||
ENV ES_URL http://es:9200
|
ENV ES_URL http://es:9200
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
OPTS="-e $ES_URL"
|
OPTS="-e $ES_URL -H $HOSTNAME"
|
||||||
|
|
||||||
exec bin/kibana $OPTS
|
exec bin/kibana $OPTS
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,13 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|||||||
jq \
|
jq \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
RUN useradd -M -s /bin/false --uid 1000 minecraft \
|
RUN useradd -s /bin/false --uid 1000 minecraft \
|
||||||
&& mkdir /data \
|
&& mkdir /data \
|
||||||
&& mkdir /config \
|
&& mkdir /config \
|
||||||
&& mkdir /mods \
|
&& mkdir /mods \
|
||||||
&& mkdir /plugins \
|
&& mkdir /plugins \
|
||||||
&& chown minecraft:minecraft /data /config /mods /plugins
|
&& mkdir /home/minecraft \
|
||||||
|
&& chown minecraft:minecraft /data /config /mods /plugins /home/minecraft
|
||||||
|
|
||||||
EXPOSE 25565 25575
|
EXPOSE 25565 25575
|
||||||
|
|
||||||
@@ -29,7 +30,7 @@ COPY start-minecraft.sh /start-minecraft
|
|||||||
COPY mcadmin.jq /usr/share
|
COPY mcadmin.jq /usr/share
|
||||||
RUN chmod +x /usr/local/bin/*
|
RUN chmod +x /usr/local/bin/*
|
||||||
|
|
||||||
VOLUME ["/data","/mods","/config","/plugins"]
|
VOLUME ["/data","/mods","/config","/plugins","/home/minecraft"]
|
||||||
COPY server.properties /tmp/server.properties
|
COPY server.properties /tmp/server.properties
|
||||||
WORKDIR /data
|
WORKDIR /data
|
||||||
|
|
||||||
@@ -39,4 +40,4 @@ ENV UID=1000 GID=1000 \
|
|||||||
MOTD="A Minecraft Server Powered by Docker" \
|
MOTD="A Minecraft Server Powered by Docker" \
|
||||||
JVM_OPTS="-Xmx1024M -Xms1024M" \
|
JVM_OPTS="-Xmx1024M -Xms1024M" \
|
||||||
TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED LEVEL=world PVP=true DIFFICULTY=easy \
|
TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED LEVEL=world PVP=true DIFFICULTY=easy \
|
||||||
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD= MODPACK=
|
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD= MODPACK= ONLINE_MODE=TRUE CONSOLE=true
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ minecraft-server:
|
|||||||
- "25565:25565"
|
- "25565:25565"
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
EULA: TRUE
|
EULA: "TRUE"
|
||||||
|
|
||||||
image: itzg/minecraft-server
|
image: itzg/minecraft-server
|
||||||
|
|
||||||
@@ -377,18 +377,20 @@ Enables command blocks
|
|||||||
### Force Gamemode
|
### Force Gamemode
|
||||||
|
|
||||||
Force players to join in the default game mode.
|
Force players to join in the default game mode.
|
||||||
- false - Players will join in the gamemode they left in.
|
|
||||||
- true - Players will always join in the default gamemode.
|
|
||||||
|
|
||||||
docker run -d -e FORCE_GAMEMODE=false
|
* false - Players will join in the gamemode they left in.
|
||||||
|
* true - Players will always join in the default gamemode.
|
||||||
|
|
||||||
|
`docker run -d -e FORCE_GAMEMODE=false`
|
||||||
|
|
||||||
### Generate Structures
|
### Generate Structures
|
||||||
|
|
||||||
Defines whether structures (such as villages) will be generated.
|
Defines whether structures (such as villages) will be generated.
|
||||||
- false - Structures will not be generated in new chunks.
|
|
||||||
- true - Structures will be generated in new chunks.
|
|
||||||
|
|
||||||
docker run -d -e GENERATE_STRUCTURES=true
|
* false - Structures will not be generated in new chunks.
|
||||||
|
* true - Structures will be generated in new chunks.
|
||||||
|
|
||||||
|
`docker run -d -e GENERATE_STRUCTURES=true`
|
||||||
|
|
||||||
### Hardcore
|
### Hardcore
|
||||||
|
|
||||||
@@ -537,7 +539,13 @@ To use this option pass the environment variable `MODPACK`, such as
|
|||||||
top level of the zip archive. Make sure the jars are compatible with the
|
top level of the zip archive. Make sure the jars are compatible with the
|
||||||
particular `TYPE` of server you are running.
|
particular `TYPE` of server you are running.
|
||||||
|
|
||||||
## JVM Configuration
|
### Online mode
|
||||||
|
|
||||||
|
By default, server checks connecting players against Minecraft's account database. If you want to create an offline server or your server is not connected to the internet, you can disable the server to try connecting to minecraft.net to authenticate players with environment variable `ONLINE_MODE`, like this
|
||||||
|
|
||||||
|
docker run -d -e ONLINE_MODE=FALSE ...
|
||||||
|
|
||||||
|
## Miscellaneous Options
|
||||||
|
|
||||||
### Memory Limit
|
### Memory Limit
|
||||||
|
|
||||||
@@ -545,3 +553,7 @@ The Java memory limit can be adjusted using the `JVM_OPTS` environment variable,
|
|||||||
the setting shown in the example (max and min at 1024 MB):
|
the setting shown in the example (max and min at 1024 MB):
|
||||||
|
|
||||||
docker run -e 'JVM_OPTS=-Xmx1024M -Xms1024M' ...
|
docker run -e 'JVM_OPTS=-Xmx1024M -Xms1024M' ...
|
||||||
|
|
||||||
|
### /data ownership
|
||||||
|
|
||||||
|
In order to adapt to differences in `UID` and `GID` settings the entry script will attempt to correct ownership and writability of the `/data` directory. This logic can be disabled by setting `-e SKIP_OWNERSHIP_FIX=TRUE`.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ minecraft-server:
|
|||||||
- "25565:25565"
|
- "25565:25565"
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
EULA: TRUE
|
EULA: "TRUE"
|
||||||
|
|
||||||
image: itzg/minecraft-server
|
image: itzg/minecraft-server
|
||||||
|
|
||||||
|
|||||||
@@ -316,6 +316,7 @@ if [ ! -e server.properties ]; then
|
|||||||
setServerProp "level-seed" "$SEED"
|
setServerProp "level-seed" "$SEED"
|
||||||
setServerProp "pvp" "$PVP"
|
setServerProp "pvp" "$PVP"
|
||||||
setServerProp "generator-settings" "$GENERATOR_SETTINGS"
|
setServerProp "generator-settings" "$GENERATOR_SETTINGS"
|
||||||
|
setServerProp "online-mode" "$ONLINE_MODE"
|
||||||
|
|
||||||
if [ -n "$LEVEL_TYPE" ]; then
|
if [ -n "$LEVEL_TYPE" ]; then
|
||||||
# normalize to uppercase
|
# normalize to uppercase
|
||||||
@@ -361,7 +362,7 @@ if [ ! -e server.properties ]; then
|
|||||||
case ${MODE,,?} in
|
case ${MODE,,?} in
|
||||||
0|1|2|3)
|
0|1|2|3)
|
||||||
;;
|
;;
|
||||||
s*)
|
su*)
|
||||||
MODE=0
|
MODE=0
|
||||||
;;
|
;;
|
||||||
c*)
|
c*)
|
||||||
@@ -370,7 +371,7 @@ if [ ! -e server.properties ]; then
|
|||||||
a*)
|
a*)
|
||||||
MODE=2
|
MODE=2
|
||||||
;;
|
;;
|
||||||
s*)
|
sp*)
|
||||||
MODE=3
|
MODE=3
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -440,10 +441,16 @@ if [ "$TYPE" = "SPIGOT" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $CONSOLE = false ]]; then
|
||||||
|
EXTRA_ARGS=--noconsole
|
||||||
|
else
|
||||||
|
EXTRA_ARGS=""
|
||||||
|
fi
|
||||||
|
|
||||||
# If we have a bootstrap.txt file... feed that in to the server stdin
|
# If we have a bootstrap.txt file... feed that in to the server stdin
|
||||||
if [ -f /data/bootstrap.txt ];
|
if [ -f /data/bootstrap.txt ];
|
||||||
then
|
then
|
||||||
exec java $JVM_OPTS -jar $SERVER "$@" < /data/bootstrap.txt
|
exec java $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS < /data/bootstrap.txt
|
||||||
else
|
else
|
||||||
exec java $JVM_OPTS -jar $SERVER "$@"
|
exec java $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -4,16 +4,19 @@ set -e
|
|||||||
usermod --uid $UID minecraft
|
usermod --uid $UID minecraft
|
||||||
groupmod --gid $GID minecraft
|
groupmod --gid $GID minecraft
|
||||||
|
|
||||||
chown -R minecraft:minecraft /data /start-minecraft
|
if [ "$SKIP_OWNERSHIP_FIX" != "TRUE" ]; then
|
||||||
chmod -R g+wX /data /start-minecraft
|
fix_ownership() {
|
||||||
|
dir=$1
|
||||||
|
if ! sudo -u minecraft test -w $dir; then
|
||||||
|
echo "Correcting writability of $dir ..."
|
||||||
|
chown -R minecraft:minecraft $dir
|
||||||
|
chmod -R u+w $dir
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
while lsof -- /start-minecraft; do
|
fix_ownership /data
|
||||||
echo -n "."
|
fix_ownership /home/minecraft
|
||||||
sleep 1
|
fi
|
||||||
done
|
|
||||||
|
|
||||||
mkdir -p /home/minecraft
|
|
||||||
chown minecraft: /home/minecraft
|
|
||||||
|
|
||||||
echo "Switching to user 'minecraft'"
|
echo "Switching to user 'minecraft'"
|
||||||
exec sudo -E -u minecraft /start-minecraft "$@"
|
exec sudo -E -u minecraft /start-minecraft "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user