From 5b0c900ebed78a1fe1d798132cd6e3393e5a8295 Mon Sep 17 00:00:00 2001 From: satriadhikara <84092642+satriadhikara@users.noreply.github.com> Date: Mon, 12 Oct 2026 08:10:23 +0700 Subject: [PATCH] fix(docker): make Compose health checks reflect service state - mysqld exporters ran `-h` as their health check, which is not a command, so they were always unhealthy. Probe the exporter's own /metrics endpoint over bash /dev/tcp (the image ships no curl/wget) and require `mysql_up 1`. - auth-db and dashboard-db ran psql over TCP, which needs a password. dashboard-db has no PGPASSWORD, so it never became healthy. Use pg_isready, which checks readiness without authenticating. - The gateway check piped into `exit`, which always returns 0, so the gateway reported healthy even when /health was unreachable. Use `curl -f` and `grep -q` so the pipeline status is the check result. --- .docker/docker-compose.yml | 10 +++++----- .../etc/skel/docker-compose.yml | 8 ++++---- docker-compose.yml | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 9a8a9e7f8..5a9fe112a 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -50,7 +50,7 @@ services: volumes: - ./config/metrics.cnf:/.my.cnf healthcheck: - test: -h + test: bash -c 'exec 3<>/dev/tcp/127.0.0.1/9104 && printf "GET /metrics HTTP/1.0\r\n\r\n" >&3 && grep -q "^mysql_up 1" <&3' <<: *healthcheck-params depends_on: dbrepo-metadata-db: @@ -91,7 +91,7 @@ services: volumes: - ./config/metrics.cnf:/.my.cnf healthcheck: - test: -h + test: bash -c 'exec 3<>/dev/tcp/127.0.0.1/9104 && printf "GET /metrics HTTP/1.0\r\n\r\n" >&3 && grep -q "^mysql_up 1" <&3' <<: *healthcheck-params depends_on: dbrepo-data-db: @@ -112,7 +112,7 @@ services: POSTGRESQL_PASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" PGPASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" healthcheck: - test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'" + test: "pg_isready -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak}" <<: *healthcheck-params logging: driver: json-file @@ -129,7 +129,7 @@ services: POSTGRESQL_USERNAME: "${DASHBOARD_DB_USERNAME:-grafana}" POSTGRESQL_PASSWORD: "${DASHBOARD_DB_PASSWORD:-dbrepo}" healthcheck: - test: "psql -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana} -c 'select version();'" + test: "pg_isready -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana}" <<: *healthcheck-params logging: driver: json-file @@ -422,7 +422,7 @@ services: dbrepo-ui: condition: service_healthy healthcheck: - test: curl -sSL 127.0.0.1:8080/health | grep 'UP' | exit + test: curl -fsS 127.0.0.1:8080/health | grep -q 'UP' <<: *healthcheck-params logging: driver: json-file diff --git a/.live/config/includes.chroot_after_packages/etc/skel/docker-compose.yml b/.live/config/includes.chroot_after_packages/etc/skel/docker-compose.yml index fd8ca9f76..28c5b8c2a 100644 --- a/.live/config/includes.chroot_after_packages/etc/skel/docker-compose.yml +++ b/.live/config/includes.chroot_after_packages/etc/skel/docker-compose.yml @@ -50,7 +50,7 @@ services: volumes: - ./config/metrics.cnf:/.my.cnf healthcheck: - test: -h + test: bash -c 'exec 3<>/dev/tcp/127.0.0.1/9104 && printf "GET /metrics HTTP/1.0\r\n\r\n" >&3 && grep -q "^mysql_up 1" <&3' <<: *healthcheck-params depends_on: dbrepo-metadata-db: @@ -91,7 +91,7 @@ services: volumes: - ./config/metrics.cnf:/.my.cnf healthcheck: - test: -h + test: bash -c 'exec 3<>/dev/tcp/127.0.0.1/9104 && printf "GET /metrics HTTP/1.0\r\n\r\n" >&3 && grep -q "^mysql_up 1" <&3' <<: *healthcheck-params depends_on: dbrepo-data-db: @@ -112,7 +112,7 @@ services: POSTGRESQL_PASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" PGPASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" healthcheck: - test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'" + test: "pg_isready -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak}" <<: *healthcheck-params logging: driver: json-file @@ -129,7 +129,7 @@ services: POSTGRESQL_USERNAME: "${DASHBOARD_DB_USERNAME:-grafana}" POSTGRESQL_PASSWORD: "${DASHBOARD_DB_PASSWORD:-dbrepo}" healthcheck: - test: "psql -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana} -c 'select version();'" + test: "pg_isready -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana}" <<: *healthcheck-params logging: driver: json-file diff --git a/docker-compose.yml b/docker-compose.yml index 1d1d3c1f1..308785e5f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,7 +74,7 @@ services: POSTGRESQL_PASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" PGPASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}" healthcheck: - test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'" + test: "pg_isready -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak}" <<: *healthcheck-params logging: driver: json-file @@ -91,7 +91,7 @@ services: POSTGRESQL_USERNAME: "${DASHBOARD_DB_USERNAME:-grafana}" POSTGRESQL_PASSWORD: "${DASHBOARD_DB_PASSWORD:-dbrepo}" healthcheck: - test: "psql -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana} -c 'select version();'" + test: "pg_isready -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana}" <<: *healthcheck-params logging: driver: json-file @@ -402,7 +402,7 @@ services: dbrepo-ui: condition: service_healthy healthcheck: - test: curl -sSL 127.0.0.1:8080/health | grep 'UP' | exit + test: curl -fsS 127.0.0.1:8080/health | grep -q 'UP' <<: *healthcheck-params logging: driver: json-file