#!/bin/sh CONTAINER_IMAGE="registry.makerforce.io/ambrose/env" CONTAINER_IMAGE_PWN="registry.makerforce.io/ambrose/pwn" CONTAINER_HOME="/home/ambrose" OPTIND=1 workdir="" delete="" name="" ports="\n\t" volumes="" image="$CONTAINER_IMAGE" show_help() { cat << EOF Usage: ${0##*/} [-xwt] [-n NAME] [-p PORT]... [-v LIST]... [CMD]... ${0##*/} -l ${0##*/} -a NAME ${0##*/} -e NAME [CMD]... ${0##*/} -h Starts an env Docker container. If CMD is specified, starts CMD instead of a shell. -x delete Docker container after exit. will loose data -w forward \$PWD into $CONTAINER_HOME/src, and start there -n NAME give container a NAME -p PORT forward host PORT to container PORT -v LIST mount volume LIST. specify as LOCAL:MOUNT -t run pwntools instead -l list running containers and exit -a NAME attach to a running container -e NAME execute zsh or CMD on a running container -h display this help and exit EOF } list_running() { docker ps \ --filter \ label=org.label-schema.vcs-url=https://git.makerforce.io/ambrose/env.git \ --format \ "table {{.Names}}\t{{.RunningFor}}\t{{.Ports}}\t{{.Command}}" } while getopts "xwn:p:v:tla:e:h" opt; do case "$opt" in x) delete="--rm " ;; w) workdir="\n\t--workdir $CONTAINER_HOME/src " volumes="$volumes\n\t-v '$PWD':$CONTAINER_HOME/src " ;; n) name="--name $OPTARG " ;; p) ports="$ports-p $OPTARG:$OPTARG " ;; v) volumes="$volumes\n\t-v '$OPTARG' " ;; t) image="$CONTAINER_IMAGE_PWN" ;; l) list_running exit 0 ;; a) mode_attach="true" name="$OPTARG" ;; e) mode_execute="true" name="$OPTARG" ;; h) show_help exit 0 ;; :) echo "Option -$OPTARG requires an argument." >&2 show_help exit 1 ;; \?) echo "Invalid option: -$OPTARG" >&2 show_help exit 1 ;; esac done shift $((OPTIND-1)) [ "$1" = "--" ] && shift if [ "$ports" = "\n\t" ]; then ports="" fi if [ "$mode_attach" = "true" ]; then docker attach \ $name exit 0 fi if [ "$mode_execute" = "true" ]; then cmd="$@" if [ -z "$@" ]; then cmd="/bin/zsh" fi docker exec -it \ $name \ $cmd exit 0 fi docker pull $image cmd="\n\ docker run -it $delete$name$ports$workdir$volumes\n\ $image \n\ $@\ " echo echo "Running: $cmd" bash -c "`echo $cmd | tr -d '\n'`" # Ugh...