Date: 2026-03-01
Issue: DashAppRunner/GanttAppRunner failed to start with “Docker environment not available” error
Root Cause: PostgreSQL JDBC driver not loaded in JPMS module-path at runtime
When starting DashAppRunner or GanttAppRunner, the Docker health check failed with:
❌ Cannot connect to database 'jeeeraaah': No suitable driver found for jdbc:postgresql://localhost:5432/jeeeraaah
❌ Cannot connect to database 'lib_test': No suitable driver found for jdbc:postgresql://localhost:5432/lib_test
❌ Cannot connect to database 'keycloak': No suitable driver found for jdbc:postgresql://localhost:5432/keycloak
Docker containers were healthy and running, but the JDBC driver was not available at runtime.
The PostgreSQL JDBC driver (org.postgresql:postgresql) is an automatic JPMS module named org.postgresql.jdbc.
docker_health/pom.xmlrequires org.postgresql.jdbc; in module-info.java filesWith JPMS (Java Platform Module System), compile-time dependencies ≠ runtime module availability. The driver needs to be both:
File: root/lib/docker_health/src/main/java/module-info.java
module de.ruu.lib.docker.health
{
requires static lombok;
requires org.slf4j;
requires java.sql;
requires org.postgresql.jdbc; // ← ADDED: PostgreSQL JDBC driver (automatic module)
requires de.ruu.lib.util.config.mp;
requires static de.ruu.lib.keycloak.admin;
exports de.ruu.lib.docker.health;
exports de.ruu.lib.docker.health.check;
exports de.ruu.lib.docker.health.fix;
}
File: root/app/jeeeraaah/frontend/ui/fx/src/main/java/module-info.java
module de.ruu.app.jeeeraaah.frontend.ui.fx
{
// ... other requires ...
requires de.ruu.lib.docker.health;
requires de.ruu.lib.keycloak.admin;
requires org.postgresql.jdbc; // ← ADDED: Required by docker.health JDBC health checks
// ... rest of module declaration ...
}
File: root/app/jeeeraaah/frontend/ui/fx/pom.xml
<dependency>
<groupId>r-uu</groupId>
<artifactId>r-uu.lib.docker_health</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<!-- ↓ ADDED: PostgreSQL JDBC driver - required by docker_health runtime -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>r-uu</groupId>
<artifactId>r-uu.lib.keycloak_admin</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
After the fix, both applications start successfully:
✅ Docker daemon is running
✅ Database 'jeeeraaah' is accessible
✅ Database 'lib_test' is accessible
✅ Database 'keycloak' is accessible
✅ Keycloak server is running
✅ Keycloak realm 'jeeeraaah-realm' is fully configured
✅ JasperReports service is running
✅ ALL SERVICES HEALTHY - Ready to start!
✅ Docker environment health check passed
# Test DashAppRunner
cd root/app/jeeeraaah/frontend/ui/fx
mvn exec:java
# Test GanttAppRunner
mvn exec:java@gantt
org.postgresql.jdbc)
jar --describe-module --file postgresql-*.jarTransitive Dependencies: Even if a dependency is transitive (docker_health → postgresql), consuming modules must explicitly requires it if they use exec-maven-plugin
Module vs Classpath: In JPMS, dependencies on classpath but not in module-path will not be available at runtime
ws.rs → ws_rs, api.client → api_client (completed)✅ RESOLVED - Both DashAppRunner and GanttAppRunner start successfully ✅ All Docker health checks pass ✅ All database connections working ✅ Application proceeds to authentication and UI initialization