mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-26 19:06:25 +00:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c6a2cf44f | ||
|
|
536a7f6095 | ||
|
|
df9e725baf | ||
|
|
156716a7d8 | ||
|
|
0876ef7704 | ||
|
|
5c3ea25ff3 | ||
|
|
bd8e0cf5d2 | ||
|
|
1d5c4e3b0b | ||
|
|
6a565692a0 | ||
|
|
cf68446a00 | ||
|
|
c4a92f6706 | ||
|
|
7bb397a031 | ||
|
|
d86f034e96 | ||
|
|
20385507d8 | ||
|
|
91def1176d | ||
|
|
2e03ee4197 | ||
|
|
e8dd60a831 | ||
|
|
dc15094b8a | ||
|
|
fc807429e4 | ||
|
|
5ec21fc0ba | ||
|
|
3a0a8a9ced | ||
|
|
b9b05dbdfc | ||
|
|
179e72cda0 | ||
|
|
2b9514ab0b | ||
|
|
8a04a9f72e | ||
|
|
3a7af8e8d6 | ||
|
|
615d12bce3 | ||
|
|
72d055ac19 | ||
|
|
80c18004c1 | ||
|
|
97e9b2901c | ||
|
|
027d94cc77 | ||
|
|
66261af03d | ||
|
|
290e2c734a | ||
|
|
54d19715c7 | ||
|
|
bbe1533f91 | ||
|
|
97040f61ed | ||
|
|
55801ac11c | ||
|
|
07c32d8ee4 | ||
|
|
2e631bcbd9 | ||
|
|
c96c630fe5 | ||
|
|
f69e75cfc1 | ||
|
|
6157a693f1 | ||
|
|
854a158d3d | ||
|
|
18919ef33c | ||
|
|
32b0737e70 | ||
|
|
79eb164e90 | ||
|
|
e3296c3cc0 | ||
|
|
f5dbbcc2c6 | ||
|
|
134eaedf23 | ||
|
|
4a89f3c579 | ||
|
|
17420ed590 | ||
|
|
2125fa0855 | ||
|
|
5c14c30a78 | ||
|
|
788d06c086 | ||
|
|
1a88c96beb | ||
|
|
b8d69278e4 | ||
|
|
4a7ecffcbb | ||
|
|
9fe0021a7a | ||
|
|
2d8b3d7275 | ||
|
|
f48eedee78 | ||
|
|
08d459c373 |
10
README.md
10
README.md
@@ -1,6 +1,10 @@
|
|||||||
dockerfiles
|
|
||||||
===========
|
|
||||||
|
|
||||||
Contains the various Dockerfile definitions I'm maintaining.
|
This repository contains the various Dockerfile definitions I'm maintaining.
|
||||||
|
|
||||||
[](https://gitter.im/itzg/dockerfiles?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
[](https://gitter.im/itzg/dockerfiles?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||||
|
|
||||||
|
### Discontinued
|
||||||
|
|
||||||
|
##### Cassandra
|
||||||
|
|
||||||
|
I have found the [official image](https://hub.docker.com/_/cassandra/) to be quite sufficient
|
||||||
|
|||||||
2
build
2
build
@@ -5,10 +5,8 @@ pkgs="$pkgs minecraft-server"
|
|||||||
pkgs="$pkgs elasticsearch"
|
pkgs="$pkgs elasticsearch"
|
||||||
pkgs="$pkgs kibana"
|
pkgs="$pkgs kibana"
|
||||||
pkgs="$pkgs titan-gremlin"
|
pkgs="$pkgs titan-gremlin"
|
||||||
pkgs="$pkgs cassandra"
|
|
||||||
|
|
||||||
for p in $pkgs
|
for p in $pkgs
|
||||||
do
|
do
|
||||||
docker build -t itzg/$p $p
|
docker build -t itzg/$p $p
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
FROM java:openjdk-8u72-jdk
|
|
||||||
|
|
||||||
MAINTAINER itzg
|
|
||||||
|
|
||||||
ENV CASSANDRA_VERSION 2.2.8
|
|
||||||
|
|
||||||
ADD http://apache.mirrors.pair.com/cassandra/$CASSANDRA_VERSION/apache-cassandra-$CASSANDRA_VERSION-bin.tar.gz /tmp/apache-cassandra.tgz
|
|
||||||
RUN tar -C /opt -zxf /tmp/apache-cassandra.tgz && \
|
|
||||||
rm /tmp/apache-cassandra.tgz
|
|
||||||
|
|
||||||
|
|
||||||
RUN mv /opt/apache-cassandra-$CASSANDRA_VERSION /opt/cassandra
|
|
||||||
ENV CASSANDRA_HOME /opt/cassandra
|
|
||||||
ENV CASSANDRA_CONF /conf
|
|
||||||
ENV CASSANDRA_DATA /data
|
|
||||||
WORKDIR $CASSANDRA_HOME
|
|
||||||
|
|
||||||
RUN ln -s $CASSANDRA_HOME/bin/* /usr/local/bin
|
|
||||||
VOLUME ["/data","/conf"]
|
|
||||||
|
|
||||||
EXPOSE 9042 9160 7000 7001
|
|
||||||
|
|
||||||
ADD cassandra.in.sh $CASSANDRA_HOME/cassandra.in.sh
|
|
||||||
RUN mv $CASSANDRA_HOME/bin/cassandra.in.sh $CASSANDRA_HOME/bin/orig.cassandra.in.sh
|
|
||||||
|
|
||||||
CMD ["/opt/cassandra/bin/cassandra", "-f"]
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
Yet another Cassandra image, but this one got container and non-container access right.
|
|
||||||
|
|
||||||
# Basic Usage
|
|
||||||
|
|
||||||
To support access from both Docker containers and external, non-Docker clients:
|
|
||||||
|
|
||||||
docker run -d --name cassandra -e PUBLISH_AS=192.168.59.103 -p 9160:9160 itzg/cassandra
|
|
||||||
|
|
||||||
replacing `192.168.59.103` with your Docker host's LAN IP address.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
cassYml=$CASSANDRA_HOME/conf/cassandra.yaml
|
|
||||||
|
|
||||||
privateAddr=$(hostname -i)
|
|
||||||
|
|
||||||
seeds=${SEEDS:-${PUBLISH_AS:-$privateAddr}}
|
|
||||||
|
|
||||||
sed -i -e "s/- seeds:.*/- seeds: \"$seeds\"/" \
|
|
||||||
-e "s/listen_address:.*/listen_address: $privateAddr/" \
|
|
||||||
-e "s/rpc_address:.*/rpc_address: $privateAddr/" \
|
|
||||||
-e "s/start_rpc:.*/start_rpc: true/" \
|
|
||||||
-e "s#- /var/lib/cassandra/data#- $CASSANDRA_DATA#" \
|
|
||||||
$cassYml
|
|
||||||
|
|
||||||
if [ -n "$PUBLISH_AS" ]; then
|
|
||||||
sed -i -e "s/\(\s*#\)\?\s*broadcast_address:.*/broadcast_address: $PUBLISH_AS/" $cassYml
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy over our tweaked files, but non-clobbering to let user have ultimate control
|
|
||||||
cp -rn $CASSANDRA_HOME/conf/* $CASSANDRA_CONF
|
|
||||||
|
|
||||||
# source the original
|
|
||||||
. $CASSANDRA_HOME/bin/orig.cassandra.in.sh
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
FROM openjdk:8u111-jre-alpine
|
FROM openjdk:8u121-jre-alpine
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
RUN apk -U add bash
|
RUN apk -U add bash
|
||||||
|
|
||||||
ENV ES_VERSION=5.1.1
|
ENV ES_VERSION=5.4.0
|
||||||
|
|
||||||
ADD https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$ES_VERSION.tar.gz /tmp/es.tgz
|
ADD https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$ES_VERSION.tar.gz /tmp/es.tgz
|
||||||
RUN cd /usr/share && \
|
RUN cd /usr/share && \
|
||||||
@@ -13,10 +13,10 @@ RUN cd /usr/share && \
|
|||||||
|
|
||||||
EXPOSE 9200 9300
|
EXPOSE 9200 9300
|
||||||
|
|
||||||
|
HEALTHCHECK --timeout=5s CMD wget -q -O - http://$HOSTNAME:9200/_cat/health
|
||||||
|
|
||||||
ENV ES_HOME=/usr/share/elasticsearch-$ES_VERSION \
|
ENV ES_HOME=/usr/share/elasticsearch-$ES_VERSION \
|
||||||
DEFAULT_ES_USER=elasticsearch \
|
DEFAULT_ES_USER=elasticsearch \
|
||||||
DISCOVER_TRANSPORT_IP=eth0 \
|
|
||||||
DISCOVER_HTTP_IP=eth0 \
|
|
||||||
ES_JAVA_OPTS="-Xms1g -Xmx1g"
|
ES_JAVA_OPTS="-Xms1g -Xmx1g"
|
||||||
|
|
||||||
RUN adduser -S -s /bin/sh $DEFAULT_ES_USER
|
RUN adduser -S -s /bin/sh $DEFAULT_ES_USER
|
||||||
|
|||||||
@@ -54,6 +54,40 @@ and then check the cluster health, such as http://192.168.99.100:9200/_cluster/h
|
|||||||
"unassigned_shards" : 0
|
"unassigned_shards" : 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
If you have a Docker Swarm cluster already initialized you can download this
|
||||||
|
[docker-compose.yml](https://raw.githubusercontent.com/itzg/dockerfiles/master/elasticsearch/docker-compose.yml) and deploy a cluster using:
|
||||||
|
|
||||||
|
docker stack deploy -c docker-compose.yml es
|
||||||
|
|
||||||
|
|
||||||
|
With a `docker service ls` you can confirm 1 master, 2 data, and 1 gateway nodes are running:
|
||||||
|
|
||||||
|
```
|
||||||
|
ID NAME MODE REPLICAS IMAGE
|
||||||
|
9nwnno8hbqgk es_kibana replicated 1/1 kibana:latest
|
||||||
|
f5x7nipwmvkr es_gateway replicated 1/1 es
|
||||||
|
om8rly2yxylw es_data replicated 2/2 es
|
||||||
|
tdvfilj370yn es_master replicated 1/1 es
|
||||||
|
```
|
||||||
|
|
||||||
|
As you can see, there is also a Kibana instance included and available at port 5601.
|
||||||
|
|
||||||
|
# Health Checks
|
||||||
|
|
||||||
|
This container declares a [HEALTHCHECK](https://docs.docker.com/engine/reference/builder/#/healthcheck) that queries the `_cat/health`
|
||||||
|
endpoint for a quick, one-line gauge of health every 30 seconds.
|
||||||
|
|
||||||
|
The current health of the container is shown in the `STATUS` column of `docker ps`, such as
|
||||||
|
|
||||||
|
Up 14 minutes (healthy)
|
||||||
|
|
||||||
|
You can also check the history of health checks from `inspect`, such as:
|
||||||
|
|
||||||
|
```
|
||||||
|
> docker inspect -f "{{json .State.Health}}" es
|
||||||
|
{"Status":"healthy","FailingStreak":0,"Log":[...
|
||||||
|
```
|
||||||
|
|
||||||
# Configuration Summary
|
# Configuration Summary
|
||||||
|
|
||||||
## Ports
|
## Ports
|
||||||
@@ -147,12 +181,13 @@ To simplify all that, this image provides a `TYPE` variable to let you amongst t
|
|||||||
* `MASTER` : master-eligible, but holds no data. It is good to have three or more of these in a
|
* `MASTER` : master-eligible, but holds no data. It is good to have three or more of these in a
|
||||||
large cluster
|
large cluster
|
||||||
* `DATA` (or `NON_MASTER`) : holds data and serves search/index requests. Scale these out for elastic-y goodness.
|
* `DATA` (or `NON_MASTER`) : holds data and serves search/index requests. Scale these out for elastic-y goodness.
|
||||||
* `GATEWAY` : only operates as a client node or a "smart router". These are the ones whose HTTP port 9200 will need to be exposed
|
* `GATEWAY` (or `COORDINATING`) : only operates as a client node or a "smart router". These are the ones whose HTTP port 9200 will need to be exposed
|
||||||
|
* `INGEST` : operates only as an ingest node and is not master or data eligble
|
||||||
|
|
||||||
A [Docker Compose](https://docs.docker.com/compose/overview/) file will serve as a good example of these three node types:
|
A [Docker Compose](https://docs.docker.com/compose/overview/) file will serve as a good example of these three node types:
|
||||||
|
|
||||||
```
|
```
|
||||||
version: '2'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
gateway:
|
gateway:
|
||||||
@@ -175,6 +210,14 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
UNICAST_HOSTS: master,gateway
|
UNICAST_HOSTS: master,gateway
|
||||||
TYPE: DATA
|
TYPE: DATA
|
||||||
|
|
||||||
|
kibana:
|
||||||
|
image: kibana
|
||||||
|
ports:
|
||||||
|
- "5601:5601"
|
||||||
|
environment:
|
||||||
|
ELASTICSEARCH_URL: http://gateway:9200
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Minimum Master Nodes
|
## Minimum Master Nodes
|
||||||
@@ -187,20 +230,16 @@ Using the Docker Compose file above, a value of `2` is appropriate when scaling
|
|||||||
|
|
||||||
docker-compose scale master=3
|
docker-compose scale master=3
|
||||||
|
|
||||||
## Auto transport/http discovery with Swarm Mode
|
## Multiple Network Binding, such as Swarm Mode
|
||||||
|
|
||||||
When using Docker Swarm mode (starting with 1.12), the overlay and ingress network interfaces are assigned
|
When using Docker Swarm mode the container is presented with multiple ethernet
|
||||||
multiple IP addresses. As a result, it creates confusion for the transport publish logic even when using
|
devices. By default, all global, routable IP addresses are configured for
|
||||||
the special value `_eth0_`.
|
Elasticsearch to use as `network.host`.
|
||||||
|
|
||||||
To resolve this, add
|
That discovery can be overridden by providing a specific ethernet device name
|
||||||
|
to `DISCOVER_TRANSPORT_IP` and/or `DISCOVER_HTTP_IP`, such as
|
||||||
|
|
||||||
-e DISCOVER_TRANSPORT_IP=eth0
|
-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 DISCOVER_HTTP_IP=eth2
|
-e DISCOVER_HTTP_IP=eth2
|
||||||
|
|
||||||
## Heap size and other JVM options
|
## Heap size and other JVM options
|
||||||
|
|||||||
44
elasticsearch/docker-compose-localbuild.yml
Normal file
44
elasticsearch/docker-compose-localbuild.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
master:
|
||||||
|
build: .
|
||||||
|
environment:
|
||||||
|
TYPE: MASTER
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
MIN_MASTERS: 1
|
||||||
|
deploy:
|
||||||
|
replicas: 1
|
||||||
|
update_config:
|
||||||
|
parallelism: 1
|
||||||
|
data:
|
||||||
|
build: .
|
||||||
|
environment:
|
||||||
|
TYPE: DATA
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
deploy:
|
||||||
|
replicas: 2
|
||||||
|
update_config:
|
||||||
|
parallelism: 1
|
||||||
|
delay: 60s
|
||||||
|
gateway:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "9200:9200"
|
||||||
|
- "9300:9300"
|
||||||
|
environment:
|
||||||
|
TYPE: GATEWAY
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
ingest:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "9222:9200"
|
||||||
|
environment:
|
||||||
|
TYPE: INGEST
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
kibana:
|
||||||
|
image: kibana
|
||||||
|
ports:
|
||||||
|
- "5601:5601"
|
||||||
|
environment:
|
||||||
|
ELASTICSEARCH_URL: http://gateway:9200
|
||||||
44
elasticsearch/docker-compose.yml
Normal file
44
elasticsearch/docker-compose.yml
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
master:
|
||||||
|
image: itzg/elasticsearch
|
||||||
|
environment:
|
||||||
|
TYPE: MASTER
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
MIN_MASTERS: 1
|
||||||
|
deploy:
|
||||||
|
replicas: 1
|
||||||
|
update_config:
|
||||||
|
parallelism: 1
|
||||||
|
data:
|
||||||
|
image: itzg/elasticsearch
|
||||||
|
environment:
|
||||||
|
TYPE: DATA
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
deploy:
|
||||||
|
replicas: 2
|
||||||
|
update_config:
|
||||||
|
parallelism: 1
|
||||||
|
delay: 60s
|
||||||
|
gateway:
|
||||||
|
image: itzg/elasticsearch
|
||||||
|
ports:
|
||||||
|
- "9200:9200"
|
||||||
|
- "9300:9300"
|
||||||
|
environment:
|
||||||
|
TYPE: GATEWAY
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
ingest:
|
||||||
|
image: itzg/elasticsearch
|
||||||
|
ports:
|
||||||
|
- "9222:9200"
|
||||||
|
environment:
|
||||||
|
TYPE: INGEST
|
||||||
|
UNICAST_HOSTS: master
|
||||||
|
kibana:
|
||||||
|
image: kibana
|
||||||
|
ports:
|
||||||
|
- "5601:5601"
|
||||||
|
environment:
|
||||||
|
ELASTICSEARCH_URL: http://gateway:9200
|
||||||
@@ -19,6 +19,22 @@ discoverIpFromLink() {
|
|||||||
OPTS="$OPTS -E $mode.host=$ip"
|
OPTS="$OPTS -E $mode.host=$ip"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
discoverAllGlobalIps() {
|
||||||
|
if [ ${#IGNORE_NETWORK} -eq 0 ]
|
||||||
|
then
|
||||||
|
IGNORE_NETWORK='999.999.999.999'
|
||||||
|
fi
|
||||||
|
printf "Finding IPs"
|
||||||
|
while [ ${#ips} -eq 0 ]
|
||||||
|
do
|
||||||
|
printf "."
|
||||||
|
ips=`ipaddr show scope global| grep -v "inet ${IGNORE_NETWORK}" | awk '$1 == "inet" { if (!match($2,"/32")) { gsub("/.*","",$2) ; addrs[length(addrs)] = $2 } } END { for (i in addrs) { if (i>0) printf "," ; printf addrs[i] } }'`
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
echo " found! $ips"
|
||||||
|
OPTS="$OPTS -E network.host=$ips"
|
||||||
|
}
|
||||||
|
|
||||||
setup_clustering() {
|
setup_clustering() {
|
||||||
|
|
||||||
if [ -n "$CLUSTER" ]; then
|
if [ -n "$CLUSTER" ]; then
|
||||||
@@ -72,15 +88,19 @@ setup_personality() {
|
|||||||
if [ -n "$TYPE" ]; then
|
if [ -n "$TYPE" ]; then
|
||||||
case $TYPE in
|
case $TYPE in
|
||||||
MASTER)
|
MASTER)
|
||||||
OPTS="$OPTS -E node.master=true -E node.data=false"
|
OPTS="$OPTS -E node.master=true -E node.data=false -E node.ingest=false"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
GATEWAY)
|
GATEWAY|COORDINATING)
|
||||||
OPTS="$OPTS -E node.master=false -E node.data=false"
|
OPTS="$OPTS -E node.master=false -E node.data=false -E node.ingest=false"
|
||||||
|
;;
|
||||||
|
|
||||||
|
INGEST)
|
||||||
|
OPTS="$OPTS -E node.master=false -E node.data=false -E node.ingest=true"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
DATA|NON_MASTER)
|
DATA|NON_MASTER)
|
||||||
OPTS="$OPTS -E node.master=false -E node.data=true"
|
OPTS="$OPTS -E node.master=false -E node.data=true -E node.ingest=false"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
@@ -112,8 +132,13 @@ OPTS="$OPTS \
|
|||||||
-E transport.tcp.port=9300 \
|
-E transport.tcp.port=9300 \
|
||||||
-E http.port=9200"
|
-E http.port=9200"
|
||||||
|
|
||||||
discoverIpFromLink $DISCOVER_TRANSPORT_IP transport
|
discoverAllGlobalIps
|
||||||
discoverIpFromLink $DISCOVER_HTTP_IP http
|
if [ "${DISCOVER_TRANSPORT_IP}" != "" ]; then
|
||||||
|
discoverIpFromLink $DISCOVER_TRANSPORT_IP transport
|
||||||
|
fi
|
||||||
|
if [ "${DISCOVER_HTTP_IP}" != "" ]; then
|
||||||
|
discoverIpFromLink $DISCOVER_HTTP_IP http
|
||||||
|
fi
|
||||||
|
|
||||||
setup_personality
|
setup_personality
|
||||||
setup_clustering
|
setup_clustering
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
FROM java:8
|
FROM java:8
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV GITBLIT_VERSION 1.7.1
|
ENV GITBLIT_VERSION 1.7.1
|
||||||
|
|
||||||
RUN wget -qO /tmp/gitblit.tgz http://dl.bintray.com/gitblit/releases/gitblit-$GITBLIT_VERSION.tar.gz
|
RUN wget -qO /tmp/gitblit.tgz http://dl.bintray.com/gitblit/releases/gitblit-$GITBLIT_VERSION.tar.gz
|
||||||
|
|
||||||
RUN tar -C /opt -xvf /tmp/gitblit.tgz && \
|
RUN tar -C /opt -xvf /tmp/gitblit.tgz && \
|
||||||
rm /tmp/gitblit.tgz
|
rm /tmp/gitblit.tgz
|
||||||
|
|
||||||
VOLUME ["/data"]
|
VOLUME ["/data"]
|
||||||
|
|
||||||
ADD start.sh /start
|
ADD start.sh /start
|
||||||
|
|
||||||
ENV GITBLIT_PATH=/opt/gitblit-${GITBLIT_VERSION} \
|
ENV GITBLIT_PATH=/opt/gitblit-${GITBLIT_VERSION} \
|
||||||
GITBLIT_HTTPS_PORT=443 \
|
GITBLIT_HTTPS_PORT=443 \
|
||||||
GITBLIT_HTTP_PORT=80 \
|
GITBLIT_HTTP_PORT=80 \
|
||||||
@@ -20,7 +20,7 @@ ENV GITBLIT_PATH=/opt/gitblit-${GITBLIT_VERSION} \
|
|||||||
GITBLIT_ADMIN_USER=admin \
|
GITBLIT_ADMIN_USER=admin \
|
||||||
GITBLIT_INITIAL_REPO=
|
GITBLIT_INITIAL_REPO=
|
||||||
WORKDIR $GITBLIT_PATH
|
WORKDIR $GITBLIT_PATH
|
||||||
|
|
||||||
EXPOSE 80 443
|
EXPOSE 80 443
|
||||||
|
|
||||||
ENTRYPOINT ["/start"]
|
ENTRYPOINT ["/start"]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM itzg/ubuntu-openjdk-7
|
FROM itzg/ubuntu-openjdk-7
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
RUN apt-get install -y curl unzip
|
RUN apt-get install -y curl unzip
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM ubuntu:trusty
|
FROM ubuntu:trusty
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV APT_GET_UPDATE 2014-09-18
|
ENV APT_GET_UPDATE 2014-09-18
|
||||||
|
|
||||||
@@ -21,4 +21,3 @@ EXPOSE 4000
|
|||||||
|
|
||||||
ADD start.sh /start
|
ADD start.sh /start
|
||||||
CMD ["/start"]
|
CMD ["/start"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM java:openjdk-8u102-jdk
|
FROM java:openjdk-8u102-jdk
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
FROM openjdk:8u111-jre
|
FROM openjdk:8u111-jre
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV KIBANA_VERSION 5.1.1
|
ENV KIBANA_VERSION 5.1.2
|
||||||
|
|
||||||
ADD https://artifacts.elastic.co/downloads/kibana/kibana-${KIBANA_VERSION}-linux-x86_64.tar.gz /tmp/kibana.tgz
|
ADD https://artifacts.elastic.co/downloads/kibana/kibana-${KIBANA_VERSION}-linux-x86_64.tar.gz /tmp/kibana.tgz
|
||||||
|
|
||||||
|
|||||||
12
kibana/docker-compose-test.yml
Normal file
12
kibana/docker-compose-test.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
es:
|
||||||
|
build: ../elasticsearch
|
||||||
|
ports:
|
||||||
|
- "9200:9200"
|
||||||
|
|
||||||
|
kibana:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "5601:5601"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM itzg/ubuntu-openjdk-7
|
FROM itzg/ubuntu-openjdk-7
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV LOGSTASH_VERSION 1.5.0-1
|
ENV LOGSTASH_VERSION 1.5.0-1
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,36 @@
|
|||||||
FROM java:8
|
FROM alpine
|
||||||
|
|
||||||
MAINTAINER itzg
|
|
||||||
|
|
||||||
ENV APT_GET_UPDATE 2016-04-23
|
LABEL maintainer "itzg"
|
||||||
RUN apt-get update
|
|
||||||
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
RUN echo "http://dl-3.alpinelinux.org/alpine/v3.5/community/" >> /etc/apk/repositories &&\
|
||||||
imagemagick \
|
apk update && \
|
||||||
lsof \
|
apk add \
|
||||||
nano \
|
openjdk8-jre-base \
|
||||||
sudo \
|
openssl \
|
||||||
vim \
|
imagemagick \
|
||||||
jq \
|
lsof \
|
||||||
&& apt-get clean
|
su-exec \
|
||||||
|
bash \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
jq \
|
||||||
|
mysql-client \
|
||||||
|
python python-dev && \
|
||||||
|
rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
RUN useradd -s /bin/false --uid 1000 minecraft \
|
RUN addgroup -g 1000 minecraft \
|
||||||
|
&& adduser -Ss /bin/false -u 1000 -G minecraft -h /home/minecraft minecraft \
|
||||||
&& mkdir /data \
|
&& mkdir /data \
|
||||||
&& mkdir /config \
|
&& mkdir /config \
|
||||||
&& mkdir /mods \
|
&& mkdir /mods \
|
||||||
&& mkdir /plugins \
|
&& mkdir /plugins \
|
||||||
&& mkdir /home/minecraft \
|
|
||||||
&& chown minecraft:minecraft /data /config /mods /plugins /home/minecraft
|
&& chown minecraft:minecraft /data /config /mods /plugins /home/minecraft
|
||||||
|
|
||||||
EXPOSE 25565 25575
|
EXPOSE 25565 25575
|
||||||
|
|
||||||
ADD https://github.com/itzg/restify/releases/download/1.0.3/restify_linux_amd64 /usr/local/bin/restify
|
ADD https://github.com/itzg/restify/releases/download/1.0.4/restify_linux_amd64 /usr/local/bin/restify
|
||||||
|
ADD https://github.com/itzg/rcon-cli/releases/download/1.3/rcon-cli_linux_amd64 /usr/local/bin/rcon-cli
|
||||||
COPY start.sh /start
|
COPY start.sh /start
|
||||||
COPY start-minecraft.sh /start-minecraft
|
COPY start-minecraft.sh /start-minecraft
|
||||||
COPY mcadmin.jq /usr/share
|
COPY mcadmin.jq /usr/share
|
||||||
@@ -38,6 +44,7 @@ ENTRYPOINT [ "/start" ]
|
|||||||
|
|
||||||
ENV UID=1000 GID=1000 \
|
ENV UID=1000 GID=1000 \
|
||||||
MOTD="A Minecraft Server Powered by Docker" \
|
MOTD="A Minecraft Server Powered by Docker" \
|
||||||
JVM_OPTS="-Xmx1024M -Xms1024M" \
|
JVM_XX_OPTS="-XX:+UseG1GC" MEMORY="1G" \
|
||||||
TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED LEVEL=world PVP=true DIFFICULTY=easy \
|
TYPE=VANILLA VERSION=LATEST FORGEVERSION=RECOMMENDED LEVEL=world PVP=true DIFFICULTY=easy \
|
||||||
|
ENABLE_RCON=true RCON_PORT=25575 RCON_PASSWORD=minecraft \
|
||||||
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD= MODPACK= ONLINE_MODE=TRUE CONSOLE=true
|
LEVEL_TYPE=DEFAULT GENERATOR_SETTINGS= WORLD= MODPACK= ONLINE_MODE=TRUE CONSOLE=true
|
||||||
|
|||||||
1
minecraft-server/Minecraft server containment.xml
Normal file
1
minecraft-server/Minecraft server containment.xml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36" version="6.4.4" editor="www.draw.io" type="github"><diagram name="Page-1">1VVNc5swEP01HDMDUiDOMbGd5pK2Ux96VkGAxgJRIRvcX9+VWD40ODOZ1j0Uz9jS2w+t3ts1Ad1W/SfNmvJNZVwGJMz6gO4CQjZRCN8WuAxA8vgwAIUW2QBFM3AQvziCGFecRMZbz9EoJY1ofDBVdc1T42FMa9X5brmS/qkNK/gKOKRMrtHvIjMlolEYzoZXLooSj97EaPjB0mOh1anG8wJCc/cM5oqNudC/LVmmugVE9wHdaqXMsKr6LZeW2pG2Ie7lHetUt+a1+UgAGQLOTJ74WHEiIfQ5E2dbn7kgJ8nPky3q2fDe3DEpijqgT+AheW5mK6wK/HVZ2obVI7ZT6ZFrCHlVrRkdoLSlzwJ2BYwo8WohXSkMPzQstfsOWhCcSlNJ2EX21JFVu8mFlFsllXahdJ/YD+Bnro0AyZ+Gu+yMslnwZjt3LVd/KurCpgptLlWbA5aBXNs0vH+X/mgSFWaFq4obfQEXDKDYBhd/2809RzeIlYt2mxwZ9nkxZZ61hgXKfV16upK+EjBMmuXmruX67KSCATMMYL2SwDU5z5DkvxAE52NNvdHqyBeOoXs8UWIbplP8A3ES3UCVja/K41oVEl5RJYpuoMr9SpU34B+Qr0rD0ITD0JE4TuI/nopwLcKLexYi6OFet6CT3Pt8TjwtCI3IFUJv0eXxis9v2y+fr/D58P/yGf87PmE7v4ycbfHCp/vf</diagram></mxfile>
|
||||||
@@ -35,6 +35,24 @@ With that you can easily view the logs, stop, or re-start the container:
|
|||||||
|
|
||||||
## Interacting with the server
|
## Interacting with the server
|
||||||
|
|
||||||
|
[RCON](http://wiki.vg/RCON) is enabled by default, so you can `exec` into the container to
|
||||||
|
access the Minecraft server console:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec -i mc rcon-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `-i` is required for interactive use of rcon-cli.
|
||||||
|
|
||||||
|
To run a simple, one-shot command, such as stopping a Minecraft server, pass the command as
|
||||||
|
arguments to `rcon-cli`, such as:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec mc rcon-cli stop
|
||||||
|
```
|
||||||
|
|
||||||
|
_The `-i` is not needed in this case._
|
||||||
|
|
||||||
In order to attach and interact with the Minecraft server, add `-it` when starting the container, such as
|
In order to attach and interact with the Minecraft server, add `-it` when starting the container, such as
|
||||||
|
|
||||||
docker run -d -it -p 25565:25565 --name mc itzg/minecraft-server
|
docker run -d -it -p 25565:25565 --name mc itzg/minecraft-server
|
||||||
@@ -159,6 +177,10 @@ Enable Bukkit/Spigot server mode by adding a `-e TYPE=BUKKIT -e VERSION=1.8` or
|
|||||||
-e TYPE=SPIGOT -e VERSION=1.8 \
|
-e TYPE=SPIGOT -e VERSION=1.8 \
|
||||||
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
|
|
||||||
|
If you are hosting your own copy of Bukkit/Spigot you can override the download URLs with:
|
||||||
|
* -e BUKKIT_DOWNLOAD_URL=<url>
|
||||||
|
* -e SPIGOT_DOWNLOAD_URL=<url>
|
||||||
|
|
||||||
You can build spigot from source by adding `-e BUILD_FROM_SOURCE=true`
|
You can build spigot from source by adding `-e BUILD_FROM_SOURCE=true`
|
||||||
|
|
||||||
__NOTE: to avoid pegging the CPU when running Spigot,__ you will need to
|
__NOTE: to avoid pegging the CPU when running Spigot,__ you will need to
|
||||||
@@ -224,6 +246,9 @@ pass `--noconsole` at the very end of the command line and not use `-it`. For ex
|
|||||||
-e TYPE=PAPER -e VERSION=1.9.4 \
|
-e TYPE=PAPER -e VERSION=1.9.4 \
|
||||||
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server --noconsole
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server --noconsole
|
||||||
|
|
||||||
|
If you are hosting your own copy of PaperSpigot you can override the download URL with:
|
||||||
|
* -e PAPER_DOWNLOAD_URL=<url>
|
||||||
|
|
||||||
You can install Bukkit plugins in two ways...
|
You can install Bukkit plugins in two ways...
|
||||||
|
|
||||||
### Using the /data volume
|
### Using the /data volume
|
||||||
@@ -264,6 +289,72 @@ This works well if you want to have a common set of plugins in a separate
|
|||||||
location, but still have multiple worlds with different server requirements
|
location, but still have multiple worlds with different server requirements
|
||||||
in either persistent volumes or a downloadable archive.
|
in either persistent volumes or a downloadable archive.
|
||||||
|
|
||||||
|
## Running a Server with a Feed-The-Beast (FTB) modpack
|
||||||
|
|
||||||
|
Enable this server mode by adding a `-e TYPE=FTB` to your command-line,
|
||||||
|
but note the following additional steps needed...
|
||||||
|
|
||||||
|
You need to specify a modpack to run, using the `FTB_SERVER_MOD` environment
|
||||||
|
variable. An FTB server modpack is available together with its respective
|
||||||
|
client modpack on https://www.feed-the-beast.com under "Additional Files."
|
||||||
|
Because of the interactive delayed download mechanism on that web site, you
|
||||||
|
must manually download the server modpack. Copy the modpack to the `/data`
|
||||||
|
directory (see "Attaching data directory to host filesystem”).
|
||||||
|
|
||||||
|
Now you can add a `-e FTB_SERVER_MOD=name_of_modpack.zip` to your command-line.
|
||||||
|
|
||||||
|
$ docker run -d -v /path/on/host:/data -e TYPE=FTB \
|
||||||
|
-e FTB_SERVER_MOD=FTBPresentsSkyfactory3Server_3.0.6.zip \
|
||||||
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
|
|
||||||
|
Instead of explicitly downloading a modpack from the Feed the Beast site, you
|
||||||
|
can you set `FTB_SERVER_MOD` to the **server** URL of a modpack, such as
|
||||||
|
|
||||||
|
$ docker run ... \
|
||||||
|
-e TYPE=FTB \
|
||||||
|
-e FTB_SERVER_MOD=https://www.feed-the-beast.com/projects/ftb-infinity-lite-1-10/files/2402889
|
||||||
|
|
||||||
|
### Using the /data volume
|
||||||
|
|
||||||
|
You must use a persistent `/data` mount for this type of server.
|
||||||
|
|
||||||
|
To do this, you will need to attach the container's `/data` directory
|
||||||
|
(see "Attaching data directory to host filesystem”).
|
||||||
|
|
||||||
|
If the modpack is updated and you want to run the new version on your
|
||||||
|
server, you stop and remove the container:
|
||||||
|
|
||||||
|
docker stop mc
|
||||||
|
docker rm mc
|
||||||
|
|
||||||
|
Do not erase anything from your /data directory (unless you know of
|
||||||
|
specific mods that have been removed from the modpack). Download the
|
||||||
|
updated FTB server modpack and copy it to `/data`. Start a new container
|
||||||
|
with `FTB_SERVER_MOD` specifying the updated modpack file.
|
||||||
|
|
||||||
|
$ docker run -d -v /path/on/host:/data -e TYPE=FTB \
|
||||||
|
-e FTB_SERVER_MOD=FTBPresentsSkyfactory3Server_3.0.7.zip \
|
||||||
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
|
|
||||||
|
### FTB server JVM options
|
||||||
|
|
||||||
|
An FTB server modpack contains its own startup script that launches the
|
||||||
|
JVM and it does not use the `JVM_OPTS` environment variable. Instead
|
||||||
|
you can use `MIN_RAM` and `MAX_RAM` variables. These are appended to
|
||||||
|
the JVM `-Xms` and `-Xmx` options. For example, `-e MIN_RAM=2G` results
|
||||||
|
in `-Xms2G` passed to the JVM.
|
||||||
|
|
||||||
|
Additionally, `PERMGEN_SIZE` is passed on to `-XX:PermSize`. Here is an
|
||||||
|
example:
|
||||||
|
|
||||||
|
$ docker run -d -v /path/on/host:/data -e TYPE=FTB \
|
||||||
|
-e MIN_RAM=1G -e MAX_RAM=2G -e PERMGEN_SIZE=512M \
|
||||||
|
-e FTB_SERVER_MOD=FTBPresentsSkyfactory3Server_3.0.6.zip \
|
||||||
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
|
|
||||||
|
Note: The FTB server start script will also override other options,
|
||||||
|
like `MOTD`.
|
||||||
|
|
||||||
## Using Docker Compose
|
## Using Docker Compose
|
||||||
|
|
||||||
Rather than type the server options below, the port mappings above, etc
|
Rather than type the server options below, the port mappings above, etc
|
||||||
@@ -290,7 +381,7 @@ minecraft-server:
|
|||||||
|
|
||||||
and in the same directory as that file run
|
and in the same directory as that file run
|
||||||
|
|
||||||
docker-compose -d up
|
docker-compose up -d
|
||||||
|
|
||||||
Now, go play...or adjust the `environment` section to configure
|
Now, go play...or adjust the `environment` section to configure
|
||||||
this server instance.
|
this server instance.
|
||||||
@@ -549,10 +640,16 @@ By default, server checks connecting players against Minecraft's account databas
|
|||||||
|
|
||||||
### Memory Limit
|
### Memory Limit
|
||||||
|
|
||||||
The Java memory limit can be adjusted using the `JVM_OPTS` environment variable, where the default is
|
By default, the image declares a Java initial and maximum memory limit of 1 GB. There are several
|
||||||
the setting shown in the example (max and min at 1024 MB):
|
ways to adjust the memory settings:
|
||||||
|
|
||||||
docker run -e 'JVM_OPTS=-Xmx1024M -Xms1024M' ...
|
* `MEMORY`, "1G" by default, can be used to adjust both initial (`Xms`) and max (`Xmx`)
|
||||||
|
memory settings of the JVM
|
||||||
|
* `INIT_MEMORY`, independently sets the initial heap size
|
||||||
|
* `MAX_MEMORY`, independently sets the max heap size
|
||||||
|
|
||||||
|
The values of all three are passed directly to the JVM and support format/units as
|
||||||
|
`<size>[g|G|m|M|k|K]`.
|
||||||
|
|
||||||
### /data ownership
|
### /data ownership
|
||||||
|
|
||||||
|
|||||||
29
minecraft-server/docker-compose-big.yml
Normal file
29
minecraft-server/docker-compose-big.yml
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
minecraft:
|
||||||
|
ports:
|
||||||
|
- "25565:25565"
|
||||||
|
volumes:
|
||||||
|
- "mcbig:/data"
|
||||||
|
environment:
|
||||||
|
EULA: "TRUE"
|
||||||
|
MAX_MEMORY: 32G
|
||||||
|
MAX_BUILD_HEIGHT: 256
|
||||||
|
VIEW_DISTANCE: 15
|
||||||
|
LEVEL_TYPE: LARGEBIOMES
|
||||||
|
MAX_PLAYERS: 100
|
||||||
|
CONSOLE: "false"
|
||||||
|
image: itzg/minecraft-server
|
||||||
|
restart: always
|
||||||
|
rcon:
|
||||||
|
image: itzg/rcon
|
||||||
|
ports:
|
||||||
|
- "4326:4326"
|
||||||
|
- "4327:4327"
|
||||||
|
volumes:
|
||||||
|
- "rcon:/opt/rcon-web-admin/db"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mcbig:
|
||||||
|
rcon:
|
||||||
@@ -1,14 +1,27 @@
|
|||||||
minecraft-server:
|
version: '3'
|
||||||
ports:
|
|
||||||
- "25565:25565"
|
|
||||||
|
|
||||||
environment:
|
services:
|
||||||
EULA: "TRUE"
|
minecraft:
|
||||||
|
image: itzg/minecraft-server
|
||||||
|
ports:
|
||||||
|
- "25565:25565"
|
||||||
|
volumes:
|
||||||
|
- "mc:/data"
|
||||||
|
environment:
|
||||||
|
EULA: "TRUE"
|
||||||
|
CONSOLE: "false"
|
||||||
|
ENABLE_RCON: "true"
|
||||||
|
RCON_PASSWORD: "testing"
|
||||||
|
RCON_PORT: 28016
|
||||||
|
restart: always
|
||||||
|
rcon:
|
||||||
|
image: itzg/rcon
|
||||||
|
ports:
|
||||||
|
- "4326:4326"
|
||||||
|
- "4327:4327"
|
||||||
|
volumes:
|
||||||
|
- "rcon:/opt/rcon-web-admin/db"
|
||||||
|
|
||||||
image: itzg/minecraft-server
|
volumes:
|
||||||
|
mc:
|
||||||
container_name: minecraft-server
|
rcon:
|
||||||
|
|
||||||
tty: true
|
|
||||||
stdin_open: true
|
|
||||||
restart: always
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
.[] |
|
.[] |
|
||||||
select(.elements | length > 1) |
|
select(.elements | length > 1) |
|
||||||
select(.elements[].elements[] | select(.class == "version" and .text == $version)) |
|
select(.elements[].elements[] | select(.class == "version" and .text == $version)) |
|
||||||
.elements[].elements[] |
|
.elements[].elements[] |
|
||||||
select(.class|contains("server-jar")) |
|
select(.class|contains("server-jar")) |
|
||||||
.elements[] | select(.name="a") |
|
.elements[] | select(.name="a") |
|
||||||
.href
|
.href
|
||||||
|
|||||||
@@ -18,21 +18,23 @@ if [ ! -e /data/eula.txt ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
SERVER_PROPERTIES=/data/server.properties
|
||||||
|
FTB_DIR=/data/FeedTheBeast
|
||||||
VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
|
VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.json
|
||||||
|
|
||||||
echo "Checking version information."
|
echo "Checking version information."
|
||||||
case "X$VERSION" in
|
case "X$VERSION" in
|
||||||
X|XLATEST|Xlatest)
|
X|XLATEST|Xlatest)
|
||||||
VANILLA_VERSION=`curl -sSL $VERSIONS_JSON | jq -r '.latest.release'`
|
VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'`
|
||||||
;;
|
;;
|
||||||
XSNAPSHOT|Xsnapshot)
|
XSNAPSHOT|Xsnapshot)
|
||||||
VANILLA_VERSION=`curl -sSL $VERSIONS_JSON | jq -r '.latest.snapshot'`
|
VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.snapshot'`
|
||||||
;;
|
;;
|
||||||
X[1-9]*)
|
X[1-9]*)
|
||||||
VANILLA_VERSION=$VERSION
|
VANILLA_VERSION=$VERSION
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
VANILLA_VERSION=`curl -sSL $VERSIONS_JSON | jq -r '.latest.release'`
|
VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'`
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -56,28 +58,32 @@ function downloadSpigot {
|
|||||||
case "$TYPE" in
|
case "$TYPE" in
|
||||||
*BUKKIT|*bukkit)
|
*BUKKIT|*bukkit)
|
||||||
match="Craftbukkit"
|
match="Craftbukkit"
|
||||||
|
downloadUrl=${BUKKIT_DOWNLOAD_URL}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
match="Spigot"
|
match="Spigot"
|
||||||
|
downloadUrl=${SPIGOT_DOWNLOAD_URL}
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
downloadUrl=$(restify --class=jar-div https://mcadmin.net/ | \
|
if [[ -z $downloadUrl ]]; then
|
||||||
jq --arg version "$match $VANILLA_VERSION" -r -f /usr/share/mcadmin.jq)
|
downloadUrl=$(restify --class=jar-div https://mcadmin.net/ | \
|
||||||
if [[ -n $downloadUrl ]]; then
|
jq --arg version "$match $VANILLA_VERSION" -r -f /usr/share/mcadmin.jq)
|
||||||
echo "Downloading $match"
|
if [[ -z $downloadUrl ]]; then
|
||||||
wget -q -O $SERVER "$downloadUrl"
|
echo "ERROR: Version $VANILLA_VERSION is not supported for $TYPE"
|
||||||
status=$?
|
echo " Refer to https://mcadmin.net/ for supported versions"
|
||||||
if [ $status != 0 ]; then
|
exit 2
|
||||||
echo "ERROR: failed to download from $downloadUrl due to (error code was $status)"
|
|
||||||
exit 3
|
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
echo "ERROR: Version $VANILLA_VERSION is not supported for $TYPE"
|
|
||||||
echo " Refer to https://mcadmin.net/ for supported versions"
|
|
||||||
exit 2
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Downloading $match"
|
||||||
|
curl -kfsSL -o $SERVER "$downloadUrl"
|
||||||
|
status=$?
|
||||||
|
if [ ! -f $SERVER ]; then
|
||||||
|
echo "ERROR: failed to download from $downloadUrl (status=$status)"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function downloadPaper {
|
function downloadPaper {
|
||||||
@@ -98,11 +104,11 @@ function downloadPaper {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
if [ $build != "nosupp" ]; then
|
if [ $build != "nosupp" ]; then
|
||||||
downloadUrl="https://ci.destroystokyo.com/job/PaperSpigot/$build/artifact/paperclip.jar"
|
rm $SERVER
|
||||||
wget -q -O $SERVER "$downloadUrl"
|
downloadUrl=${PAPER_DOWNLOAD_URL:-https://ci.destroystokyo.com/job/PaperSpigot/$build/artifact/paperclip.jar}
|
||||||
status=$?
|
curl -fsSL -o $SERVER "$downloadUrl"
|
||||||
if [ $status != 0 ]; then
|
if [ ! -f $SERVER ]; then
|
||||||
echo "ERROR: failed to download from $downloadUrl due to (error code was $status)"
|
echo "ERROR: failed to download from $downloadUrl (status=$?)"
|
||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -117,15 +123,22 @@ function installForge {
|
|||||||
TYPE=FORGE
|
TYPE=FORGE
|
||||||
norm=$VANILLA_VERSION
|
norm=$VANILLA_VERSION
|
||||||
|
|
||||||
|
case $VANILLA_VERSION in
|
||||||
|
*.*.*)
|
||||||
|
norm=$VANILLA_VERSION ;;
|
||||||
|
*.*)
|
||||||
|
norm=${VANILLA_VERSION}.0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
echo "Checking Forge version information."
|
echo "Checking Forge version information."
|
||||||
case $FORGEVERSION in
|
case $FORGEVERSION in
|
||||||
RECOMMENDED)
|
RECOMMENDED)
|
||||||
curl -o /tmp/forge.json -sSL http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
|
curl -fsSL -o /tmp/forge.json http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json
|
||||||
FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$norm-recommended\"]")
|
FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$VANILLA_VERSION-recommended\"]")
|
||||||
if [ $FORGE_VERSION = null ]; then
|
if [ $FORGE_VERSION = null ]; then
|
||||||
FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$norm-latest\"]")
|
FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$VANILLA_VERSION-latest\"]")
|
||||||
if [ $FORGE_VERSION = null ]; then
|
if [ $FORGE_VERSION = null ]; then
|
||||||
echo "ERROR: Version $FORGE_VERSION is not supported by Forge"
|
echo "ERROR: Version $VANILLA_VERSION is not supported by Forge"
|
||||||
echo " Refer to http://files.minecraftforge.net/ for supported versions"
|
echo " Refer to http://files.minecraftforge.net/ for supported versions"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
@@ -137,24 +150,120 @@ function installForge {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# URL format changed for 1.7.10 from 10.13.2.1300
|
normForgeVersion=$VANILLA_VERSION-$FORGE_VERSION-$norm
|
||||||
sorted=$((echo $FORGE_VERSION; echo 10.13.2.1300) | sort -V | head -1)
|
shortForgeVersion=$VANILLA_VERSION-$FORGE_VERSION
|
||||||
if [[ $norm == '1.7.10' && $sorted == '10.13.2.1300' ]]; then
|
|
||||||
# if $FORGEVERSION >= 10.13.2.1300
|
forgeFileNames="
|
||||||
normForgeVersion="$norm-$FORGE_VERSION-$norm"
|
$normForgeVersion/forge-$normForgeVersion-installer.jar
|
||||||
|
$shortForgeVersion/forge-$shortForgeVersion-installer.jar
|
||||||
|
END
|
||||||
|
"
|
||||||
|
|
||||||
|
FORGE_INSTALLER="/tmp/forge-$shortForgeVersion-installer.jar"
|
||||||
|
installMarker=".forge-installed-$shortForgeVersion"
|
||||||
|
|
||||||
|
if [ ! -e $installMarker ]; then
|
||||||
|
if [ ! -e $FORGE_INSTALLER ]; then
|
||||||
|
echo "Downloading $normForgeVersion"
|
||||||
|
for fn in $forgeFileNames; do
|
||||||
|
if [ $fn == END ]; then
|
||||||
|
echo "Unable to compute URL for $normForgeVersion"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
downloadUrl=http://files.minecraftforge.net/maven/net/minecraftforge/forge/$fn
|
||||||
|
echo "...trying $downloadUrl"
|
||||||
|
if curl -o $FORGE_INSTALLER -fsSL $downloadUrl; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Installing Forge $shortForgeVersion"
|
||||||
|
mkdir -p mods
|
||||||
|
tries=3
|
||||||
|
while ((--tries >= 0)); do
|
||||||
|
java -jar $FORGE_INSTALLER --installServer
|
||||||
|
if [ $? == 0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if (($tries < 0)); then
|
||||||
|
echo "Forge failed to install after several tries." >&2
|
||||||
|
exit 10
|
||||||
|
fi
|
||||||
|
SERVER=$(ls *forge*$shortForgeVersion*.jar)
|
||||||
|
if [ -z $SERVER ]; then
|
||||||
|
echo "Unable to derive server jar for Forge $shortForgeVersion"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Using server $SERVER"
|
||||||
|
echo $SERVER > $installMarker
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
normForgeVersion="$norm-$FORGE_VERSION"
|
SERVER=$(cat $installMarker)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function isURL {
|
||||||
|
local value=$1
|
||||||
|
|
||||||
|
if [[ ${value:0:8} == "https://" || ${value:0:7} = "http://" ]]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function installFTB {
|
||||||
|
TYPE=FEED-THE-BEAST
|
||||||
|
|
||||||
|
echo "Looking for Feed-The-Beast server modpack."
|
||||||
|
if [[ -z $FTB_SERVER_MOD ]]; then
|
||||||
|
echo "Environment variable FTB_SERVER_MOD not set."
|
||||||
|
echo "Set FTB_SERVER_MOD to the file name of the FTB server modpack."
|
||||||
|
echo "(And place the modpack in the /data directory.)"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
local srv_modpack=${FTB_SERVER_MOD}
|
||||||
|
if isURL ${srv_modpack}; then
|
||||||
|
case $srv_modpack in
|
||||||
|
*/download)
|
||||||
|
break;;
|
||||||
|
*)
|
||||||
|
srv_modpack=${srv_modpack}/download;;
|
||||||
|
esac
|
||||||
|
local file=$(basename $(dirname $srv_modpack))
|
||||||
|
local downloaded=/data/${file}.zip
|
||||||
|
echo "Downloading FTB modpack...
|
||||||
|
$srv_modpack -> $downloaded"
|
||||||
|
curl -sSL -o $downloaded $srv_modpack
|
||||||
|
srv_modpack=$downloaded
|
||||||
|
fi
|
||||||
|
if [[ ${srv_modpack:0:5} == "data/" ]]; then
|
||||||
|
# Prepend with "/"
|
||||||
|
srv_modpack=/${srv_modpack}
|
||||||
|
fi
|
||||||
|
if [[ ! ${srv_modpack:0:1} == "/" ]]; then
|
||||||
|
# If not an absolute path, assume file is in "/data"
|
||||||
|
srv_modpack=/data/${srv_modpack}
|
||||||
|
fi
|
||||||
|
if [[ ! -f ${srv_modpack} ]]; then
|
||||||
|
echo "FTB server modpack ${srv_modpack} not found."
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
if [[ ! ${srv_modpack: -4} == ".zip" ]]; then
|
||||||
|
echo "FTB server modpack ${srv_modpack} is not a zip archive."
|
||||||
|
echo "Please set FTB_SERVER_MOD to a file with a .zip extension."
|
||||||
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FORGE_INSTALLER="forge-$normForgeVersion-installer.jar"
|
echo "Unpacking FTB server modpack ${srv_modpack} ..."
|
||||||
SERVER="forge-$normForgeVersion-universal.jar"
|
mkdir -p ${FTB_DIR}
|
||||||
|
unzip -o ${srv_modpack} -d ${FTB_DIR}
|
||||||
if [ ! -e "$SERVER" ]; then
|
cp -f /data/eula.txt ${FTB_DIR}/eula.txt
|
||||||
echo "Downloading $FORGE_INSTALLER ..."
|
FTB_SERVER_START=${FTB_DIR}/ServerStart.sh
|
||||||
wget -q http://files.minecraftforge.net/maven/net/minecraftforge/forge/$normForgeVersion/$FORGE_INSTALLER
|
chmod a+x ${FTB_SERVER_START}
|
||||||
echo "Installing $SERVER"
|
sed -i "s/-jar/-Dfml.queryResult=confirm -jar/" ${FTB_SERVER_START}
|
||||||
java -jar $FORGE_INSTALLER --installServer
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function installVanilla {
|
function installVanilla {
|
||||||
@@ -203,6 +312,11 @@ case "$TYPE" in
|
|||||||
installForge
|
installForge
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
FTB|ftb)
|
||||||
|
TYPE=FEED-THE-BEAST
|
||||||
|
installFTB
|
||||||
|
;;
|
||||||
|
|
||||||
VANILLA|vanilla)
|
VANILLA|vanilla)
|
||||||
installVanilla
|
installVanilla
|
||||||
;;
|
;;
|
||||||
@@ -254,8 +368,8 @@ if [[ "$MODPACK" ]]; then
|
|||||||
case "X$MODPACK" in
|
case "X$MODPACK" in
|
||||||
X[Hh][Tt][Tt][Pp]*[Zz][iI][pP])
|
X[Hh][Tt][Tt][Pp]*[Zz][iI][pP])
|
||||||
echo "Downloading mod/plugin pack via HTTP"
|
echo "Downloading mod/plugin pack via HTTP"
|
||||||
echo "$MODPACK"
|
echo " from $MODPACK ..."
|
||||||
wget -q -O /tmp/modpack.zip "$MODPACK"
|
curl -sSL -o /tmp/modpack.zip "$MODPACK"
|
||||||
if [ "$TYPE" = "SPIGOT" ]; then
|
if [ "$TYPE" = "SPIGOT" ]; then
|
||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
unzip -o -d /data/plugins /tmp/modpack.zip
|
unzip -o -d /data/plugins /tmp/modpack.zip
|
||||||
@@ -320,7 +434,7 @@ if [ ! -e server.properties ]; then
|
|||||||
|
|
||||||
if [ -n "$LEVEL_TYPE" ]; then
|
if [ -n "$LEVEL_TYPE" ]; then
|
||||||
# normalize to uppercase
|
# normalize to uppercase
|
||||||
LEVEL_TYPE=${LEVEL_TYPE^^}
|
LEVEL_TYPE=$( echo ${LEVEL_TYPE} | tr '[:lower:]' '[:upper:]' )
|
||||||
echo "Setting level type to $LEVEL_TYPE"
|
echo "Setting level type to $LEVEL_TYPE"
|
||||||
# check for valid values and only then set
|
# check for valid values and only then set
|
||||||
case $LEVEL_TYPE in
|
case $LEVEL_TYPE in
|
||||||
@@ -359,7 +473,8 @@ if [ ! -e server.properties ]; then
|
|||||||
|
|
||||||
if [ -n "$MODE" ]; then
|
if [ -n "$MODE" ]; then
|
||||||
echo "Setting mode"
|
echo "Setting mode"
|
||||||
case ${MODE,,?} in
|
MODE_LC=$( echo $MODE | tr '[:upper:]' '[:lower:]' )
|
||||||
|
case $MODE_LC in
|
||||||
0|1|2|3)
|
0|1|2|3)
|
||||||
;;
|
;;
|
||||||
su*)
|
su*)
|
||||||
@@ -380,7 +495,7 @@ if [ ! -e server.properties ]; then
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
sed -i "/gamemode\s*=/ c gamemode=$MODE" /data/server.properties
|
sed -i "/gamemode\s*=/ c gamemode=$MODE" $SERVER_PROPERTIES
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -417,12 +532,12 @@ if [ ! -e banned-ips.json ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# If any modules have been provided, copy them over
|
# If any modules have been provided, copy them over
|
||||||
[ -d /data/mods ] || mkdir /data/mods
|
mkdir -p /data/mods
|
||||||
for m in /mods/*.jar
|
for m in /mods/*.{jar,zip}
|
||||||
do
|
do
|
||||||
if [ -f "$m" ]; then
|
if [ -f "$m" -a ! -f "/data/mods/$m" ]; then
|
||||||
echo Copying mod `basename "$m"`
|
echo Copying mod `basename "$m"`
|
||||||
cp -f "$m" /data/mods
|
cp "$m" /data/mods
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
[ -d /data/config ] || mkdir /data/config
|
[ -d /data/config ] || mkdir /data/config
|
||||||
@@ -441,16 +556,33 @@ if [ "$TYPE" = "SPIGOT" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $CONSOLE = false ]]; then
|
EXTRA_ARGS=""
|
||||||
EXTRA_ARGS=--noconsole
|
# Optional disable console
|
||||||
else
|
if [[ ${CONSOLE} = false || ${CONSOLE} = FALSE ]]; then
|
||||||
EXTRA_ARGS=""
|
EXTRA_ARGS+="--noconsole"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If we have a bootstrap.txt file... feed that in to the server stdin
|
# Optional disable GUI for headless servers
|
||||||
if [ -f /data/bootstrap.txt ];
|
if [[ ${GUI} = false || ${GUI} = FALSE ]]; then
|
||||||
then
|
EXTRA_ARGS="${EXTRA_ARGS} nogui"
|
||||||
exec java $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS < /data/bootstrap.txt
|
fi
|
||||||
else
|
|
||||||
exec java $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS
|
# put these prior JVM_OPTS at the end to give any memory settings there higher precedence
|
||||||
|
echo "Setting initial memory to ${INIT_MEMORY:-${MEMORY}} and max to ${MAX_MEMORY:-${MEMORY}}"
|
||||||
|
JVM_OPTS="-Xms${INIT_MEMORY:-${MEMORY}} -Xmx${MAX_MEMORY:-${MEMORY}} ${JVM_OPTS}"
|
||||||
|
|
||||||
|
if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then
|
||||||
|
cp -f $SERVER_PROPERTIES ${FTB_DIR}/server.properties
|
||||||
|
cp -f /data/{eula,ops,white-list}.txt ${FTB_DIR}/
|
||||||
|
cd ${FTB_DIR}
|
||||||
|
echo "Running FTB server modpack start ..."
|
||||||
|
exec sh ${FTB_SERVER_START}
|
||||||
|
else
|
||||||
|
# If we have a bootstrap.txt file... feed that in to the server stdin
|
||||||
|
if [ -f /data/bootstrap.txt ];
|
||||||
|
then
|
||||||
|
exec java $JVM_XX_OPTS $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS < /data/bootstrap.txt
|
||||||
|
else
|
||||||
|
exec java $JVM_XX_OPTS $JVM_OPTS -jar $SERVER "$@" $EXTRA_ARGS
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
usermod --uid $UID minecraft
|
sed -i "/^minecraft/s/:1000:1000:/:${UID}:${GID}:/g" /etc/passwd
|
||||||
groupmod --gid $GID minecraft
|
sed -i "/^minecraft/s/:1000:/:${GID}:/g" /etc/group
|
||||||
|
|
||||||
if [ "$SKIP_OWNERSHIP_FIX" != "TRUE" ]; then
|
if [ "$SKIP_OWNERSHIP_FIX" != "TRUE" ]; then
|
||||||
fix_ownership() {
|
fix_ownership() {
|
||||||
dir=$1
|
dir=$1
|
||||||
if ! sudo -u minecraft test -w $dir; then
|
if ! su-exec minecraft test -w $dir; then
|
||||||
echo "Correcting writability of $dir ..."
|
echo "Correcting writability of $dir ..."
|
||||||
chown -R minecraft:minecraft $dir
|
chown -R minecraft:minecraft $dir
|
||||||
chmod -R u+w $dir
|
chmod -R u+w $dir
|
||||||
@@ -19,4 +19,4 @@ if [ "$SKIP_OWNERSHIP_FIX" != "TRUE" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Switching to user 'minecraft'"
|
echo "Switching to user 'minecraft'"
|
||||||
exec sudo -E -u minecraft /start-minecraft "$@"
|
su-exec minecraft /start-minecraft $@
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM itzg/gvm
|
FROM itzg/gvm
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
RUN ["/run", "install", "springboot"]
|
RUN ["/run", "install", "springboot"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
FROM itzg/ubuntu-openjdk-7
|
FROM openjdk:8-jre
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV TITAN_VERSION 0.5.4
|
ENV TITAN_VERSION 0.5.4
|
||||||
|
|
||||||
RUN wget -q -O /tmp/titan.zip http://s3.thinkaurelius.com/downloads/titan/titan-$TITAN_VERSION-hadoop2.zip
|
ADD http://s3.thinkaurelius.com/downloads/titan/titan-$TITAN_VERSION-hadoop2.zip /tmp/titan.zip
|
||||||
RUN unzip -q /tmp/titan.zip -d /opt && rm /tmp/titan.zip
|
RUN unzip -q /tmp/titan.zip -d /opt && \
|
||||||
|
rm /tmp/titan.zip
|
||||||
|
|
||||||
ENV TITAN_HOME /opt/titan-$TITAN_VERSION-hadoop2
|
ENV TITAN_HOME /opt/titan-$TITAN_VERSION-hadoop2
|
||||||
WORKDIR $TITAN_HOME
|
WORKDIR $TITAN_HOME
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM itzg/ubuntu-openjdk-7
|
FROM itzg/ubuntu-openjdk-7
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV APT_GET_UPDATE 2014-07-19
|
ENV APT_GET_UPDATE 2014-07-19
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM ubuntu:trusty
|
FROM ubuntu:trusty
|
||||||
|
|
||||||
MAINTAINER itzg
|
LABEL maintainer "itzg"
|
||||||
|
|
||||||
ENV APT_GET_UPDATE 2015-10-29
|
ENV APT_GET_UPDATE 2015-10-29
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
|
|||||||
Reference in New Issue
Block a user