diff options
| author | Robert Günzler <r@gnzler.io> | 2021-04-26 13:17:18 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2021-04-26 13:17:18 +0200 |
| commit | ae795bd39751b6c385193c1fc99a0f88e399e2d6 (patch) | |
| tree | da98bd950cbc7264d33c1551235c09fabee11e07 /bin/enter | |
| parent | 9c81d5a7bafed37d5061d9d0dc719fd115abdae9 (diff) | |
bin/enter: support running without attaching tty
Diffstat (limited to 'bin/enter')
| -rwxr-xr-x | bin/enter | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/bin/enter b/bin/enter index 64e5b68..77d79e3 100755 --- a/bin/enter +++ b/bin/enter @@ -10,6 +10,7 @@ opts= become= verbose= cwd=$PWD +no_tty= usage() { printf "usage: %s OPTIONS -- [ARGS]\n" "$(basename "$0")" @@ -22,22 +23,24 @@ usage() { printf " -B (don't reassign uid/gid)\n" printf " -v (be verbose)\n" printf " -c CWD\n" + printf " -T (not tty)\n" printf "\n" printf "Enter the container defined in Dockerfile, with \$PWD mounted at /src\n" exit 2 } -while getopts t:i:f:o:c:vBDh o; do +while getopts t:i:f:o:c:vBDTh o; do case $o in - t) target="$OPTARG" ;; - i) img="$OPTARG" ;; - f) dockerfile="$OPTARG" ;; - o) opts="$OPTARG" ;; - c) cwd="$OPTARG" ;; - D) priv=1 ;; - B) become=1 ;; - v) verbose=1 ;; - h|?) usage ;; + t) target="$OPTARG" ;; + i) img="$OPTARG" ;; + f) dockerfile="$OPTARG" ;; + o) opts="$OPTARG" ;; + c) cwd="$OPTARG" ;; + D) priv=1 ;; + B) become=1 ;; + v) verbose=1 ;; + T) no_tty=1 ;; + h | ?) usage ;; esac done shift $((OPTIND - 1)) @@ -52,35 +55,41 @@ if [ -z "$img" ]; then # 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" "$PWD" + [ -f "$dockerfile" ] \ + && docker build --tag="$img" --target="$target" --file="$dockerfile" "$PWD" fi extra_args= [ -n "$become" ] && extra_args="${extra_args} " -[ -n "$priv" ] && { +[ -n "$priv" ] && { extra_args="${extra_args} \ --tmpfs=/run --tmpfs=/sys/fs/cgroup \ --sysctl=net.ipv4.ip_forward=1 \ --security-opt=apparmor:unconfined --security-opt=seccomp:unconfined \ --cap-add NET_ADMIN --cap-add SYS_ADMIN --cap-add SYS_RESOURCE \ - --tmpfs=/var/lib/docker"; + --tmpfs=/var/lib/docker" } # make the container transparent [ -z "$priv" ] && { extra_args="${extra_args} \ --privileged \ - --mount=type=bind,src=${HOME},target=/home/robert,ro \ - --network=host"; + --mount=type=bind,src=${HOME},target=${HOME},ro \ + --network=host" } [ -n "$opts" ] && extra_args="${extra_args} ${opts}" -[ -z "$become" ] && \ - extra_args="${extra_args} --user="$(id -u):$(id -g)"" +[ -z "$become" ] \ + && extra_args="${extra_args} --user="$(id -u):$(id -g)"" + +[ -z "$no_tty" ] \ + && extra_args="${extra_args} --tty" ep="sh" -[ -n "$1" ] && { ep="$1"; shift; } +[ -n "$1" ] && { + ep="$1" + shift +} [ -n "$verbose" ] && { set -x; } |