config_file=containers/"$config".yml
cidbootstrap=cids/"$config"_bootstrap.cid
local_discourse=local_discourse
-image=discourse/discourse:1.3.5
+image=discourse/base:2.0.20170531
docker_path=`which docker.io || which docker`
git_path=`which git`
exit 1
fi
- # 2. running aufs or btrfs
- test=`$docker_path info 2> /dev/null | grep 'Driver: '`
- if [[ "$test" =~ [aufs|btrfs|zfs|overlay] ]] ; then : ; else
- echo "Your Docker installation is not using a supported filesystem if we were to proceed you may have a broken install."
- echo "aufs is the recommended filesystem you should be using (zfs/btrfs and overlay may work as well)"
- echo "You can tell what filesystem you are using by running \"docker info\" and looking at the driver"
+ # 2. running an approved storage driver?
+ if ! $docker_path info 2> /dev/null | egrep -q '^Storage Driver: (aufs|btrfs|zfs|overlay|overlay2)$'; then
+ echo "Your Docker installation is not using a supported storage driver. If we were to proceed you may have a broken install."
+ echo "aufs is the recommended storage driver, although zfs/btrfs/overlay and overlay2 may work as well."
+ echo "Other storage drivers are known to be problematic."
+ echo "You can tell what filesystem you are using by running \"docker info\" and looking at the 'Storage Driver' line."
echo
- echo "If you wish to continue anyway using your existing unsupported filesystem, "
- echo "read the source code of launcher and figure out how to bypass this."
+ echo "If you wish to continue anyway using your existing unsupported storage driver,"
+ echo "read the source code of launcher and figure out how to bypass this check."
exit 1
fi
local arrTemplates=${templates// / }
- if [ ! -z $templates ]; then
+ if [ ! -z "$templates" ]; then
for template in "${arrTemplates[@]}"
do
local nested_templates=$(find_templates $template)
echo "YAML syntax error. Please check your containers/*.yml config files."
exit 1
fi
+
+ read -r -d '' labels_ruby << 'RUBY'
+ require 'yaml'
+
+ input=STDIN.readlines.join
+ # default to UTF-8 for the dbs sake
+ labels = {}
+ input.split('_FILE_SEPERATOR_').each do |yml|
+ yml.strip!
+ begin
+ labels.merge!(YAML.load(yml)['labels'] || {})
+ rescue Psych::SyntaxError => e
+ puts e
+ puts "*ERROR."
+ rescue => e
+ puts yml
+ p e
+ end
+ end
+ puts labels.map{|k,v| "-l\n#{k}=#{v}" }.join("\n")
+RUBY
+
+ raw=`exec echo "$input" | $docker_path run $user_args --rm -i -a stdin -a stdout $image ruby -e "$labels_ruby"`
+
+ labels=()
+ ok=1
+ while read i; do
+ if [ "$i" == "*ERROR." ]; then
+ ok=0
+ elif [ -n "$i" ]; then
+ labels[${#labels[@]}]=$i
+ fi
+ done <<< "$raw"
+
+ if [ "$ok" -ne 1 ]; then
+ echo "${labels[@]}"
+ echo "YAML syntax error. Please check your containers/*.yml config files."
+ exit 1
+ fi
}
if [ -z $docker_path ]; then
fi
set -x
- $docker_path run $user_args $links $attach_on_run $restart_policy "${env[@]}" -h "$hostname" \
- -e DOCKER_HOST_IP=$docker_ip --name $config -t $ports $volumes $mac_address $docker_args \
+ $docker_path run $links $attach_on_run $restart_policy "${env[@]}" "${labels[@]}" -h "$hostname" \
+ -e DOCKER_HOST_IP="$docker_ip" --name $config -t $ports $volumes $mac_address $docker_args $user_args \
$run_image $boot_command
)
echo $run_command
unset ERR
- (exec echo "$input" | $docker_path run $user_args $links "${env[@]}" -e DOCKER_HOST_IP=$docker_ip --cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \
+ (exec echo "$input" | $docker_path run $user_args $links "${env[@]}" -e DOCKER_HOST_IP="$docker_ip" --cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \
/bin/bash -c "$run_command") || ERR=$?
unset FAILED
elif [ $LOCAL = $BASE ]; then
echo "Updating Launcher"
git pull || (echo 'failed to update' && exit 1)
- exec /bin/bash $0 $@
+
+ for (( i=${#BASH_ARGV[@]}-1,j=0; i>=0,j<${#BASH_ARGV[@]}; i--,j++ ))
+ do
+ args[$j]=${BASH_ARGV[$i]}
+ done
+ exec /bin/bash $0 "${args[@]}" # $@ is empty, because of shift at the beginning. Use BASH_ARGV instead.
elif [ $REMOTE = $BASE ]; then
echo "Your version of Launcher is ahead of origin"