diff options
| author | Robert Günzler <r@gnzler.io> | 2020-06-13 14:23:57 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2020-06-13 14:23:57 +0200 |
| commit | 85e4f3c44aa01c6fea732965a747f26731adab73 (patch) | |
| tree | 7a42f106448a6029e9f5816967c7311ce4084b22 /bin/enter | |
| parent | 898cd6f445cc995b8383a73ecd1a27c19560f92d (diff) | |
move some scripts from bin/hibiki to bin
Diffstat (limited to 'bin/enter')
| -rwxr-xr-x | bin/enter | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/bin/enter b/bin/enter new file mode 100755 index 0000000..d646541 --- /dev/null +++ b/bin/enter @@ -0,0 +1,54 @@ +#!/bin/sh +set -e +[ -n "$DEBUG" ] && set -x + +target= +img="" +dockerfile="${PWD}/Dockerfile" +become= +priv= + +usage() { + printf "usage: %s OPTIONS -- [DOCKER RUN ARGS]\n" "$(basename "$0")" + printf "\n" + printf " -t TARGET\n" + printf " -i IMAGE\n" + printf " -f DOCKERFILE\n" + printf " -u (become user)\n" + printf " -D (run with elevated privileged, but not privileged)\n" + printf "\n" + printf "Enter the container defined in Dockerfile, with \$PWD mounted at /src\n" + exit 2 +} + +while getopts t:i:f:uDh o; do + case $o in + t) target="$OPTARG" ;; + i) img="$OPTARG" ;; + f) dockerfile="$OPTARG" ;; + u) become=1 ;; + D) priv=1 ;; + h|?) usage ;; + esac +done +shift $((OPTIND - 1)) + +[ -z "$img" ] && img="$(basename "$(dirname "$(readlink -f -- "$dockerfile")")")" + +extra_args= +[ -n "$become" ] && extra_args="${extra_args}--user=$(id -u):$(id -g) " +[ -n "$priv" ] && { + extra_args="${extra_args}--tmpfs=/run --tmpfs=/sys/fs/cgroup "; + extra_args="${extra_args}--sysctl=net.ipv4.ip_forward=1 "; + extra_args="${extra_args}--security-opt=apparmor:unconfined --security-opt=seccomp:unconfined "; + extra_args="${extra_args}--cap-add NET_ADMIN --cap-add SYS_ADMIN --cap-add SYS_RESOURCE "; + extra_args="${extra_args}--tmpfs=/var/lib/docker "; +} + +# allow setting this to some non-file value to skip building +# > enter -i alpine -f none +# for a quick alpine based container with $PWD mounted in +[ -f "$dockerfile" ] && \ + docker build --tag="$img" --target="$target" --file="$dockerfile" "$(dirname "$dockerfile")" + +exec docker run --rm -it --mount=type=bind,src="$PWD",dst=/src -w /src $@ $extra_args "$img" |