#!/bin/bash # Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one # or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at # https://securityonion.net/license; you may not use this file except in compliance with the # Elastic License 2.0. # Wait for the so-postgres container to accept TCP connections. # # docker_container.running returns as soon as the container starts, but on # first-init docker-entrypoint.sh starts a temporary postgres with # `listen_addresses=''` to run /docker-entrypoint-initdb.d scripts, then # shuts it down before exec'ing the real CMD. A default pg_isready check # (Unix socket) passes during that ephemeral phase and races the shutdown # with "the database system is shutting down". Checking TCP readiness on # 127.0.0.1 only succeeds after the final postgres binds the port. # # Usage: so-postgres-wait [iterations] [sleep_seconds] # Default: 60 iterations, 2s sleep (~120s total). ITERATIONS=${1:-60} SLEEP_SECONDS=${2:-2} for i in $(seq 1 "$ITERATIONS"); do if docker exec so-postgres pg_isready -h 127.0.0.1 -U postgres -q 2>/dev/null; then exit 0 fi sleep "$SLEEP_SECONDS" done echo "so-postgres did not accept TCP connections within $((ITERATIONS * SLEEP_SECONDS))s" >&2 exit 1