#!/usr/bin/env bash # Boots the embedded postgres via the pgvector image's own # docker-entrypoint, waits for it to accept connections, then execs # `skald` in the foreground. Tini is PID 1; postgres becomes our # child. When the DB is extracted to its own container, this reduces # to `exec /usr/local/bin/skald "$@"`. set -eo pipefail # Hand off to the pgvector image's own initdb + start dance. /usr/local/bin/docker-entrypoint.sh postgres & PG_PID=$! # Wait for postgres to accept connections — initdb-on-first-run can # take a few seconds. 60s cap so we don't hang forever. for i in $(seq 1 120); do if pg_isready -h localhost -p 5432 -U "${POSTGRES_USER:-skald}" -d "${POSTGRES_DB:-skald}" >/dev/null 2>&1; then echo "skald-entrypoint: postgres ready after ${i} polls" break fi if [ "$i" -eq 120 ]; then echo "skald-entrypoint: postgres failed to become ready after 60s" >&2 kill "$PG_PID" 2>/dev/null || true exit 1 fi sleep 0.5 done # Exec skald in the foreground. Container's lifecycle now tracks # skald — if skald exits, the container exits, postgres comes down # with it, restart policy decides whether to recycle. exec /usr/local/bin/skald "$@"