Docker¶
Docker Compose pulls a published Report Server image. It does not build the application. This repository's GitHub Actions do not publish that image. The supported installation is Compose, because the stack includes PostgreSQL, Report Server, the scheduler, persistent volumes, networking, and health checks.
Clone the deployment repository. Setup creates .env before the stack starts. It generates the internal PostgreSQL password and the Designer internal token, asks for the administrator username and password, and asks for the timezone. It does not print either secret. It does not build the application image and does not ask for a Report Server or Designer Web license. After sign-in, open License to start the existing Report Server trial or install a license, and to start the separate Designer Web trial.
git clone https://github.com/AcuGIS/report-server-docker
cd report-server-docker
docker compose run --rm -it report-server-setup
docker compose up -d
JRS_ADMIN_USER defaults to admin. Setup writes JRS_DB_PASS and JRS_DESIGNER_INTERNAL_TOKEN and does not print them. Compose passes the database password to PostgreSQL as POSTGRES_PASSWORD and passes the same Designer token to Report Server and Designer Web. Later docker compose up, down, restart, and image upgrades do not replace an existing password or token. Running setup again leaves .env unchanged unless you confirm, and it keeps JRS_DB_PASS and JRS_DESIGNER_INTERNAL_TOKEN unless you explicitly replace them. Advanced settings can be edited in .env after setup. The example change-me-* values cannot be used to start Report Server. Designer Web is reached through port 9088. Port 8787 is not published.
In this source repository the Compose files are under docker/. The public deployment repository is AcuGIS/report-server-docker.
Open http://127.0.0.1:9088/. The packaged base path is /. JRS_HOST_PORT changes the published host port (default 9088).
The Compose file pulls the image named in docker/compose.yml. Set REPORT_SERVER_IMAGE before setup to select another published tag. Setup records that name in .env. A local source build is separate: docker compose -f compose.yml -f compose.build.yml up -d --build.
Docker Hub¶
The image on Docker Hub is not a standalone install. Do not use docker run acugis/report-server as the deployment method. Follow the Compose instructions above. docker compose up pulls the image when it is not already present.
The deployment files are in AcuGIS/report-server-docker.
Architecture¶
One report-server container runs the Go application and Tomcat 10 with the JasperReports WAR. Designer Web runs in report-designer and shares that container's network namespace. PostgreSQL and a scheduler container are separate services.
Internet / LAN
|
v
report-server :9088 (Go UI/API, published on the host)
|
+--> Tomcat 10 :8080 (Compose network only)
+--> Designer Web 127.0.0.1:8787 (same network namespace, not published)
|
+--> postgres :5432 (Compose network, or your own PostgreSQL)
|
report-scheduler (jrs-schedule-dispatcher -> jrs-run-schedule)
|
+--> postgres
+--> http://report-server:8080/report
| Component | In this Compose file |
|---|---|
| Go Report Server | jrs-server, host port 9088 |
| Tomcat / Jasper | Tomcat 10 inside report-server, port 8080, not published |
| PostgreSQL | PostgreSQL 16 — image version is pinned in docker/compose.yml and is not published to a host port |
| Scheduler | report-scheduler, health port 9089, not published |
| Designer Web | report-designer, 127.0.0.1:8787 inside report-server, not published |
| Java | 17 |
Release images are built from docker/report-server/Dockerfile. Customer Compose pulls the published image. Exact patch versions are pinned in that Dockerfile. See docker/README.md.
Jasper URL¶
| Process | JRS_JASPER_INTERNAL_REPORT_URL |
|---|---|
report-server |
http://127.0.0.1:8080/report |
report-scheduler |
http://report-server:8080/report |
Port 9099 is the Go process fallback when that variable is unset. Compose sets 8080. Do not point a Compose deployment at 9099.
Inside the report-server container the Go process listens on 0.0.0.0:9088. The host reaches it through the published port.
Edition¶
Customer Compose pulls acugis/report-server:1.0.21-professional. Set REPORT_SERVER_IMAGE=acugis/report-server:1.0.21-oss for the Open Source image. An Open Source image does not compile Professional modules. A Professional image without a valid license still includes Data Explorer and embedded QGIS. Map Reports, dashboards, Dataset Intelligence, MCP, and the other license-gated modules stay off until a license is valid. ACUGIS_EDITION is not a license. See the compatibility matrix.
Scheduling¶
Scheduled reports are handled by the report-scheduler service. No host cron or systemd timers are required, and you should not invoke the scheduler by hand.
The scheduler runs jrs-schedule-dispatcher, which polls due schedules and executes jrs-run-schedule <schedule_id>. It receives the Designer upstream and internal token because it loads the same configuration rules as Report Server. It does not serve Designer and does not publish port 8787.
| Variable | Purpose |
|---|---|
JRS_DB_* |
Same application database as report-server |
JRS_SMTP_* |
Scheduled email |
TZ |
IANA timezone for calendar and once times, on both services (default UTC) |
JRS_SCHEDULER_POLL_INTERVAL |
Poll interval (default 15s) |
Per-schedule logs on the shared volume:
Native installs keep using systemd timers. They do not use this service.
Optional QGIS Server¶
QGIS Server is not in the default stack. Native installs do not install it.
Copy QGIS Desktop .qgz / .qgs files into docker/qgis/projects/ and file datasources into docker/qgis/data/. Designer uses http://127.0.0.1:9088/qgis/ (or https://<host>/qgis/ behind your proxy). Do not publish the QGIS container port. See docker/qgis/README.md.
External PostgreSQL¶
Set JRS_DB_HOST, JRS_DB_PORT, JRS_DB_NAME, JRS_DB_USER, and JRS_DB_PASS, then remove or disable the postgres service. docker/compose.external-postgres.example.yml is an example of that override. Keep the same report-server and report-scheduler image.
Useful commands¶
docker compose logs -f report-server
curl -sS http://127.0.0.1:9088/health
curl -sS http://127.0.0.1:9088/ready
docker compose down
docker compose down -v deletes the Compose volumes.
Recreating the report-server container changes the network namespace Designer uses. docker compose up -d recreates report-designer when that container id has changed. docker compose restart keeps the same containers. To replace Report Server by name, recreate both:
Related¶
- Installation
- Deployment
- Configuration
- Repository guide:
docker/README.md