Skip to content
Contact Us

OIE Docker Image

Saga IT publishes sagait/engine on Docker Hub — a distribution of Open Integration Engine (OIE) with a curated set of community plugins pre-installed. OIE is the open-source fork of Mirth Connect that continues active development after NextGen Healthcare transitioned Mirth Connect to commercial-only licensing.

The plugins are baked into the image at build time, so they are available immediately without any additional setup.


Give your container a name and run it in the background:

Terminal
docker run --name oie -d -p 8443:8443 sagait/engine

To use a different base image variant, specify a tag:

Terminal
docker run --name oie -d -p 8443:8443 sagait/engine:latest-alpine-jdk

PluginDescription
mirthsync-mirth-pluginEngine-side plugin for MirthSync integration
simple-channel-historyLightweight channel deployment history tracking
tls-manager-pluginTLS certificate management UI for the engine

You can install additional plugins at runtime using the custom-extensions volume or the EXTENSIONS_DOWNLOAD environment variable.


All images are published to Docker Hub:

  • Alpine (default)
    • latest, latest-alpine, latest-alpine-jre4.5.2-alpine, 4.5.2-alpine-jre
    • latest-alpine-jdk4.5.2-alpine-jdk
  • Ubuntu
    • latest-ubuntu, latest-ubuntu-jre4.5.2-ubuntu, 4.5.2-ubuntu-jre
    • latest-ubuntu-jdk4.5.2-ubuntu-jdk

The JRE variants are smaller (283 MB Alpine, 310 MB Ubuntu). Use the JDK variants if you need to compile custom Java code at runtime.


For production use, run OIE with an external PostgreSQL database instead of the embedded Derby.

compose.yaml
services:
engine:
image: sagait/engine
environment:
- DATABASE=postgres
- DATABASE_URL=jdbc:postgresql://db:5432/enginedb
- DATABASE_MAX_CONNECTIONS=20
- DATABASE_USERNAME=enginedb
- DATABASE_PASSWORD=enginedb
- DATABASE_MAX_RETRY=2
- DATABASE_RETRY_WAIT=10000
- KEYSTORE_STOREPASS=docker_storepass
- KEYSTORE_KEYPASS=docker_keypass
- VMOPTIONS=-Xmx512m
ports:
- "8080:8080/tcp"
- "8443:8443/tcp"
depends_on:
- db
db:
image: postgres
environment:
- POSTGRES_USER=enginedb
- POSTGRES_PASSWORD=enginedb
- POSTGRES_DB=enginedb
ports:
- "5432:5432/tcp"

Start the stack:

Terminal
docker compose up -d

Environment variables configure the mirth.properties file and JVM options.

Set them with -e on the command line:

Terminal
docker run -e DATABASE='postgres' -e DATABASE_URL='jdbc:postgresql://db:5432/enginedb' -p 8443:8443 sagait/engine

Or use an env file:

myenvfile.txt
DATABASE=postgres
DATABASE_URL=jdbc:postgresql://serverip:5432/enginedb
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=postgres
DATABASE_MAX_RETRY=2
DATABASE_RETRY_WAIT=10000
KEYSTORE_STOREPASS=changeme
KEYSTORE_KEYPASS=changeme
VMOPTIONS=-Xmx512m
Terminal
docker run --env-file=myenvfile.txt -p 8443:8443 sagait/engine
VariableDescription
DATABASEBackend database type: derby, mysql, postgres, oracle, sqlserver
DATABASE_URLJDBC connection URL (e.g. jdbc:postgresql://host:5432/enginedb)
DATABASE_USERNAMEDatabase username
DATABASE_PASSWORDDatabase password
DATABASE_MAX_CONNECTIONSMax connections for the internal connection pool
DATABASE_MAX_RETRYNumber of connection retry attempts on startup (default: 2, so 3 total)
DATABASE_RETRY_WAITMilliseconds between retry attempts (default: 10000)
VariableDescription
KEYSTORE_STOREPASSPassword for the keystore file
KEYSTORE_KEYPASSPassword for keys within the keystore (server cert + encryption key)
KEYSTORE_TYPEKeystore type
KEYSTORE_DOWNLOADURL to download a keystore file into the container
ALLOW_INSECUREAllow insecure SSL for startup downloads (true/false, default: false)
VariableDescription
VMOPTIONSJVM options, e.g. -Xmx512m
DELAYSeconds to wait before starting the engine (useful when DB needs time to initialize)
SESSION_STORESet to true to store web sessions in the database (for clustered deployments)
SERVER_IDSet a specific server.id value — preferred over persisting appdata
EXTENSIONS_DOWNLOADURL to a zip file of extension zips to install at startup
CUSTOM_JARS_DOWNLOADURL to a zip of JAR files to add to the server classpath

Any environment variable starting with _MP_ sets the corresponding value in mirth.properties. Replace . with a single underscore _ and - with two underscores __.

Examples:

Set TLS protocols to only allow TLSv1.2 and 1.3:

mirth.properties
https.server.protocols = TLSv1.3,TLSv1.2
Environment variable
_MP_HTTPS_SERVER_PROTOCOLS='TLSv1.3,TLSv1.2'

Set max connections for the read-only database pool:

mirth.properties
database-readonly.max-connections = 20
Environment variable
_MP_DATABASE__READONLY_MAX__CONNECTIONS='20'

For sensitive information, use Docker Secrets instead of environment variables. Two secret names are supported:

SecretPurpose
mirth_propertiesProperties merged into mirth.properties
oieserver_vmoptionsJVM options appended to the .vmoptions file

Example: Store keystore credentials as a secret:

secret.properties
keystore.storepass=changeme
keystore.keypass=changeme
compose.yaml
services:
engine:
image: sagait/engine
environment:
- VMOPTIONS=-Xmx512m
secrets:
- mirth_properties
ports:
- "8080:8080/tcp"
- "8443:8443/tcp"
secrets:
mirth_properties:
file: /local/path/to/secret.properties

The appdata directory stores configuration files and temporary data created after startup, including the keystore and server.id. Mount a volume to persist this across container restarts:

Terminal
docker run -v /local/path/to/appdata:/opt/engine/appdata -p 8443:8443 sagait/engine

Or in your compose file:

compose.yaml
services:
engine:
image: sagait/engine
volumes:
- ./appdata:/opt/engine/appdata

The entrypoint script automatically installs any .zip files found in /opt/engine/custom-extensions before the engine starts:

Terminal
docker run -v /local/path/to/extensions:/opt/engine/custom-extensions -p 8443:8443 sagait/engine

Place your extension ZIP files in the local folder and they will be installed on every container start.