#!/bin/bash here="$(realpath $(dirname "$0"))" toplevel="$(realpath "$here/../..")" group_args=() docker_args=() for gid in $(id -G); do group_args+=(--group-add "$gid") done interactive= if [[ "$1" = -* ]]; then while [[ "$1" != "--" && $# != 0 ]]; do case "$1" in --*) if [[ "$1" = --interactive || "$1" = --interactive=true ]]; then interactive=y fi ;; -*) if [[ "$1" = -*i* ]]; then interactive=y fi ;; *) ;; esac docker_args+=("$1") shift done if [[ "$1" != "--" ]]; then echo "Expected '--' to terminate docker flag list" exit 1 fi shift fi MAVEN_LOCAL_REPO="$HOME/.m2" mkdir -p "$MAVEN_LOCAL_REPO" docker_common_args=( --network host \ -u "$(id -u):$(id -g)" \ "${group_args[@]}" \ --cap-add SYS_PTRACE \ -v "$PWD:$PWD:z" \ -v "$toplevel:$toplevel:z" \ -v /tmp:/tmp:z \ -v "$MAVEN_LOCAL_REPO:$MAVEN_LOCAL_REPO:z" \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -v /etc/localtime:/etc/localtime:ro \ -w "$PWD" \ "${docker_args[@]}" \ "$(<"$here/image")" \ "$@" ) if [[ -n "$interactive" ]]; then # If --interactive was given on the command line, we can't run in detached mode # as it will be impossible to interact with the container. exec docker run --rm "${docker_common_args[@]}" fi container=$( docker run \ "--detach=true" \ "${docker_common_args[@]}" ) kill_it() { if [[ -n "$container" ]]; then docker rm -f "$container" > /dev/null container= fi } trap kill_it SIGTERM SIGINT SIGHUP EXIT docker logs --follow "$container" if [[ -n "$container" ]]; then exitcode="$(docker wait "$container")" else exitcode=99 fi kill_it trap - SIGTERM SIGINT SIGHUP EXIT # after "docker kill", docker wait will not print anything [[ -z "$exitcode" ]] && exitcode=1 exit "$exitcode"