72 lines
1.6 KiB
Bash
Executable File
72 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PROJECT_DIR="${PROJECT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
|
|
ROOTLESS_RUNTIME_DIR="${ROOTLESS_RUNTIME_DIR:-$HOME/.docker/run}"
|
|
DOCKER_SOCK="${DOCKER_SOCK:-$ROOTLESS_RUNTIME_DIR/docker.sock}"
|
|
DOCKER_LOG="${DOCKER_LOG:-$HOME/.docker/dockerd-rootless.log}"
|
|
|
|
ensure_docker() {
|
|
mkdir -p "$ROOTLESS_RUNTIME_DIR"
|
|
chmod 700 "$ROOTLESS_RUNTIME_DIR"
|
|
|
|
if DOCKER_HOST="unix://$DOCKER_SOCK" docker info >/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
|
|
if ! pgrep -u "$(id -u)" -f "dockerd-rootless.sh.*$DOCKER_SOCK" >/dev/null 2>&1; then
|
|
: > "$DOCKER_LOG"
|
|
setsid sh -c \
|
|
"export XDG_RUNTIME_DIR='$ROOTLESS_RUNTIME_DIR'; exec dockerd-rootless.sh --iptables=false --host=unix://$DOCKER_SOCK >> '$DOCKER_LOG' 2>&1" \
|
|
< /dev/null >/dev/null 2>&1 &
|
|
fi
|
|
|
|
for _ in $(seq 1 45); do
|
|
if DOCKER_HOST="unix://$DOCKER_SOCK" docker info >/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
echo "Docker rootless daemon did not become ready. Last log lines:" >&2
|
|
tail -n 80 "$DOCKER_LOG" >&2 || true
|
|
return 1
|
|
}
|
|
|
|
compose() {
|
|
ensure_docker
|
|
export DOCKER_HOST="unix://$DOCKER_SOCK"
|
|
cd "$PROJECT_DIR"
|
|
docker compose "$@"
|
|
}
|
|
|
|
case "${1:-up}" in
|
|
start)
|
|
ensure_docker
|
|
;;
|
|
up)
|
|
compose up -d
|
|
;;
|
|
build-up)
|
|
compose up -d --build
|
|
;;
|
|
ps)
|
|
compose ps
|
|
;;
|
|
logs)
|
|
shift
|
|
compose logs "${@:-api}"
|
|
;;
|
|
down)
|
|
compose down
|
|
;;
|
|
health)
|
|
curl -fsS http://127.0.0.1:${API_PORT:-8102}/v1/admin/health
|
|
echo
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|up|build-up|ps|logs [service]|down|health}" >&2
|
|
exit 2
|
|
;;
|
|
esac
|