run 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/usr/bin/env bash
  2. set -e
  3. rm -rf "$DEST"
  4. if ! command -v dockerd &> /dev/null; then
  5. echo >&2 'error: binary-daemon or dynbinary-daemon must be run before run'
  6. false
  7. fi
  8. DOCKER_COMMAND="$(command -v dockerd)"
  9. DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs}
  10. DOCKER_USERLANDPROXY=${DOCKER_USERLANDPROXY:-true}
  11. # example usage: DOCKER_STORAGE_OPTS="dm.basesize=20G,dm.loopdatasize=200G"
  12. storage_params=""
  13. if [ -n "$DOCKER_STORAGE_OPTS" ]; then
  14. IFS=','
  15. for i in ${DOCKER_STORAGE_OPTS}; do
  16. storage_params="--storage-opt $i $storage_params"
  17. done
  18. unset IFS
  19. fi
  20. listen_port=2375
  21. if [ -n "$DOCKER_PORT" ]; then
  22. listen_port="${DOCKER_PORT##*:}"
  23. fi
  24. if [ -n "$DELVE_PORT" ]; then
  25. delve_listen_port="${DELVE_PORT##*:}"
  26. fi
  27. extra_params="$DOCKERD_ARGS"
  28. if [ "$DOCKER_REMAP_ROOT" ]; then
  29. extra_params="$extra_params --userns-remap $DOCKER_REMAP_ROOT"
  30. fi
  31. if [ -n "$DOCKER_EXPERIMENTAL" ]; then
  32. extra_params="$extra_params --experimental"
  33. fi
  34. socket=/var/run/docker.sock
  35. if [ -n "$DOCKER_ROOTLESS" ]; then
  36. user="unprivilegeduser"
  37. uid=$(id -u $user)
  38. # shellcheck disable=SC2174
  39. mkdir -p -m 700 "/tmp/docker-${uid}"
  40. chown $user "/tmp/docker-${uid}"
  41. socket=/tmp/docker-${uid}/docker.sock
  42. fi
  43. # shellcheck disable=SC2206
  44. args=(
  45. --debug
  46. --host="tcp://0.0.0.0:${listen_port}"
  47. --host="unix://${socket}"
  48. --storage-driver="${DOCKER_GRAPHDRIVER}"
  49. --userland-proxy="${DOCKER_USERLANDPROXY}"
  50. --tls=false
  51. $storage_params
  52. $extra_params
  53. )
  54. dockerd=("$DOCKER_COMMAND")
  55. if [ -n "$DELVE_PORT" ]; then
  56. dockerd=(
  57. dlv
  58. --listen="0.0.0.0:$delve_listen_port"
  59. --headless=true
  60. --log
  61. --api-version=2
  62. --only-same-user=false
  63. --check-go-version=false
  64. --accept-multiclient
  65. exec "${dockerd[@]}" --
  66. )
  67. fi
  68. if [ -n "$DOCKER_ROOTLESS" ]; then
  69. dockerd=(
  70. sudo -u "$user"
  71. -E DOCKERD="${dockerd[*]}"
  72. -E XDG_RUNTIME_DIR="/tmp/docker-${uid}"
  73. -E XDG_CONFIG_HOME="/home/${user}/.config"
  74. -E HOME="/home/${user}"
  75. --
  76. dockerd-rootless.sh
  77. )
  78. fi
  79. set -x
  80. # shellcheck disable=SC2086
  81. exec "${dockerd[@]}" "${args[@]}"