Install from the Docker image (download from S3)¶
The container alternative to the bare-metal install: download one self-contained ELTMaestro image from the public release bucket, load it into Docker, and run it. Everything — PostgreSQL, the engine, the SOAP meta-service, and Spark/Hadoop — runs inside the single container.
Prerequisites¶
- A host with Docker installed and running (Linux recommended).
- ~6 GB free disk for the image, plus room for the data volumes.
- Outbound HTTPS to download the image (or copy the tarball in for an air-gapped host).
Step 1 - download and load the image¶
Releases are published to https://eltmaestro.s3.amazonaws.com/docker/. Download the image tarball for the version you want and load it into Docker:
curl -fLO https://eltmaestro.s3.amazonaws.com/docker/eltmaestro-<VERSION>.tar.gz
docker load -i eltmaestro-<VERSION>.tar.gz
docker images eltmaestro
docker load registers eltmaestro:<VERSION> locally. The current image is eltmaestro-17.0.4.tar.gz; see Downloads for the exact URLs (the bucket isn't directory-browsable).
Step 2 - run the container¶
docker run -d --name eltmaestro --restart unless-stopped \
-p 8181:8181 \
-p 5432:5432 \
-p 10000:10000 \
-p 9080:8080 \
-p 7077:7077 \
`# optional diagnostic UIs — add only if you need them` \
-p 9870:9870 \
-p 9000:9000 \
-p 8081:8081 \
-v eltm-pgdata:/opt/iserver/server/pgsql/data \
-v eltm-hdfs:/root/hdmaestro \
-v eltm-data:/opt/iserver/data \
eltmaestro:<VERSION>
What the ports are for (only 8181 is required — the rest are optional, by feature):
| Port | Service |
|---|---|
| 8181 | SOAP meta-service over HTTPS — the desktop client connects here |
| 5432 | PostgreSQL audit DB |
| 10000 | Spark Thrift / HiveServer2 |
| 9080 | Spark master UI (container 8080) |
| 7077 | Spark master RPC |
| 9870 | HDFS NameNode web UI |
| 9000 | HDFS NameNode RPC (filesystem access) |
| 8081 | Spark worker UI |
The image
EXPOSEs all of the above; thedocker runabove publishes them to the host. The three optional ports drive diagnostic UIs only — omit their-pflags for a minimal install (the desktop client needs just 8181). The`# ...`line is a shell no-op comment, safe to keep or drop.
Two things to know:
- TLS works out of the box. The image bakes a self-signed keystore and starts the meta-service on HTTPS (
SSL_ENABLED=trueby default) — no keystore mount needed, and the desktop client accepts the self-signed cert automatically. To override:-e SSL_ENABLED=falsefor plain HTTP, or-e KEYSTORE_PATH=… -e KEYSTORE_PASSWORD=…for your own certificate. - The three named volumes hold all durable state — the audit DB, the HDFS warehouse, and deployed workflows + logs plus, since the first release after 17.0.4.451 (commit
config-preserve, September 2026), your integrator configuration (/opt/iserver/data/configon theeltm-datavolume: the per-platformsystem.cfgfiles and~/.env_integrator). Keep the same volume names across upgrades and your data and configuration persist. Use the exact container paths shown (PostgreSQL lives at/opt/iserver/server/pgsql/data, not the usual/var/lib/postgresql/data).
Step 3 - wait for startup and verify¶
First start initializes the database (a minute or two). Watch for readiness, then confirm the services and the SOAP endpoint:
docker logs -f eltmaestro # wait for "Audit database ready"
docker exec eltmaestro supervisorctl status # services should be RUNNING
curl -sk https://<server_ip>:8181/MaestroMetaDataProviderService/MaestroMetaService?wsdl | head -2
The WSDL request should return its XML header (HTTP 200).
Step 4 - default credentials¶
A bootstrap user is seeded on first start:
- User:
integrator - Password:
integrator123
Change it before connecting any real client:
Step 5 - connect the desktop client¶
Point the ELTMaestro desktop client's Server / Port at <server_ip> / 8181 and sign in as integrator with your new password. From here the User Guide covers connections, workflows, and the rest.
Upgrading¶
Download the new image tarball, load it, then recreate the container with the same volume names — your data carries over and pending migrations apply automatically on start.
Your edited configuration used to be lost here. Before that release the integrator config tree (
server/pgsql/metadata/integrators/<platform>/system.cfg, where$SYSTEM_DEFAULT_DATABASEand the other$SYSTEM_*values live) and~/.env_integratorwere part of the image, sodocker rmput the factory copies back — one site had$SYSTEM_DEFAULT_DATABASEreset todevand wrote to the wrong database for days. From that release the container keeps the site's copies on theeltm-datavolume and, at every start, keeps every file you have, adds only files that are new in the release, snapshots the previous tree to/opt/iserver/data/config/.upgrade-<stamp>/, and prints a[config]block indocker logsnaming each file whose content differs from the factory and, forsystem.cfg, each key ($SYSTEM_DEFAULT_DATABASE: site=… factory=dev).Upgrading FROM an image up to 17.0.4.451: carry your edits across once, before the
docker rm:docker exec eltmaestro sh -c 'mkdir -p /opt/iserver/data/config && > cp -a /opt/iserver/server/pgsql/metadata/integrators /opt/iserver/data/config/ && > cp -a /root/.env_integrator /opt/iserver/data/config/env_integrator'The new image finds those copies on the volume and uses them. Skip this on an old image and the first start of the new one seeds the volume from the factory — after that, edits survive.
curl -fLO https://eltmaestro.s3.amazonaws.com/docker/eltmaestro-<NEW_VERSION>.tar.gz
docker load -i eltmaestro-<NEW_VERSION>.tar.gz
docker stop eltmaestro && docker rm eltmaestro
docker run -d --name eltmaestro --restart unless-stopped \
-p 8181:8181 -p 5432:5432 -p 10000:10000 -p 9080:8080 -p 7077:7077 \
-p 9870:9870 -p 9000:9000 -p 8081:8081 \
-v eltm-pgdata:/opt/iserver/server/pgsql/data \
-v eltm-hdfs:/root/hdmaestro \
-v eltm-data:/opt/iserver/data \
eltmaestro:<NEW_VERSION>
See OPERATIONS.md for day-to-day start/stop, logs, and admin tasks.