| #!/usr/bin/env bash |
| |
| set -e |
| rm -rf "$DEST" |
| |
| if ! command -v dockerd &> /dev/null; then |
| echo >&2 'error: binary-daemon or dynbinary-daemon must be run before run' |
| false |
| fi |
| |
| DOCKER_COMMAND="$(command -v dockerd)" |
| |
| DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs} |
| DOCKER_USERLANDPROXY=${DOCKER_USERLANDPROXY:-true} |
| |
| # example usage: DOCKER_STORAGE_OPTS="dm.basesize=20G,dm.loopdatasize=200G" |
| storage_params="" |
| if [ -n "$DOCKER_STORAGE_OPTS" ]; then |
| IFS=',' |
| for i in ${DOCKER_STORAGE_OPTS}; do |
| storage_params="--storage-opt $i $storage_params" |
| done |
| unset IFS |
| fi |
| |
| listen_port=2375 |
| if [ -n "$DOCKER_PORT" ]; then |
| listen_port="${DOCKER_PORT##*:}" |
| fi |
| |
| if [ -n "$DELVE_PORT" ]; then |
| delve_listen_port="${DELVE_PORT##*:}" |
| fi |
| |
| extra_params="$DOCKERD_ARGS" |
| if [ "$DOCKER_REMAP_ROOT" ]; then |
| extra_params="$extra_params --userns-remap $DOCKER_REMAP_ROOT" |
| fi |
| |
| if [ -n "$DOCKER_EXPERIMENTAL" ]; then |
| extra_params="$extra_params --experimental" |
| fi |
| |
| socket=/var/run/docker.sock |
| if [ -n "$DOCKER_ROOTLESS" ]; then |
| user="unprivilegeduser" |
| uid=$(id -u $user) |
| # shellcheck disable=SC2174 |
| mkdir -p -m 700 "/tmp/docker-${uid}" |
| chown $user "/tmp/docker-${uid}" |
| socket=/tmp/docker-${uid}/docker.sock |
| fi |
| |
| # shellcheck disable=SC2206 |
| args=( |
| --debug |
| --host="tcp://0.0.0.0:${listen_port}" |
| --host="unix://${socket}" |
| --storage-driver="${DOCKER_GRAPHDRIVER}" |
| --userland-proxy="${DOCKER_USERLANDPROXY}" |
| $storage_params |
| $extra_params |
| ) |
| |
| dockerd=("$DOCKER_COMMAND") |
| |
| if [ -n "$DELVE_PORT" ]; then |
| dockerd=( |
| dlv |
| --listen="0.0.0.0:$delve_listen_port" |
| --headless=true |
| --log |
| --api-version=2 |
| --only-same-user=false |
| --check-go-version=false |
| --accept-multiclient |
| exec "${dockerd[@]}" -- |
| ) |
| fi |
| |
| if [ -n "$DOCKER_ROOTLESS" ]; then |
| dockerd=( |
| sudo -u "$user" |
| -E DOCKERD="${dockerd[*]}" |
| -E XDG_RUNTIME_DIR="/tmp/docker-${uid}" |
| -E XDG_CONFIG_HOME="/home/${user}/.config" |
| -E HOME="/home/${user}" |
| -- |
| dockerd-rootless.sh |
| ) |
| fi |
| |
| set -x |
| # shellcheck disable=SC2086 |
| exec "${dockerd[@]}" "${args[@]}" |