run 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. $storage_params
  51. $extra_params
  52. )
  53. dockerd=("$DOCKER_COMMAND")
  54. if [ -n "$DELVE_PORT" ]; then
  55. dockerd=(
  56. dlv
  57. --listen="0.0.0.0:$delve_listen_port"
  58. --headless=true
  59. --log
  60. --api-version=2
  61. --only-same-user=false
  62. --check-go-version=false
  63. --accept-multiclient
  64. exec "${dockerd[@]}" --
  65. )
  66. fi
  67. if [ -n "$DOCKER_ROOTLESS" ]; then
  68. dockerd=(
  69. sudo -u "$user"
  70. -E DOCKERD="${dockerd[*]}"
  71. -E XDG_RUNTIME_DIR="/tmp/docker-${uid}"
  72. -E XDG_CONFIG_HOME="/home/${user}/.config"
  73. -E HOME="/home/${user}"
  74. --
  75. dockerd-rootless.sh
  76. )
  77. fi
  78. set -x
  79. # shellcheck disable=SC2086
  80. exec "${dockerd[@]}" "${args[@]}"