Skip to main content
Version: 8.5



While the Docker images themselves are supported for production usage, Docker Compose files are designed to be used by developers to run an environment locally; they are not designed to be used in production. We recommend to use Kubernetes in production.

We provide Docker images via Dockerhub. All these images are publicly accessible (except for Web Modeler).


The provided Docker images are supported for production usage only on Linux systems. Windows or macOS are only supported for development environments.

ComponentDocker imageLink to configuration options
Zeebecamunda/zeebe:latestEnvironment variables
Operatecamunda/operate:latestOperate configuration
Tasklistcamunda/tasklist:latestTasklist configuration
Identitycamunda/identity:latestConfiguration variables
Optimizecamunda/optimize:latestEnvironment variables
Connectorscamunda/connectors:latestConnectors configuration
Connectors Bundlecamunda/connectors-bundle:latestConnectors configuration

Zeebe is the only component that is often run on its own as a standalone component. In this scenario, it does not need anything else, so a simple docker run is sufficient:

docker run --name zeebe -p 26500-26502:26500-26502 camunda/zeebe:latest

This will give you a single broker node with the following ports exposed:

  • 8080: Gateway REST API (this is one of the ports clients need to use)
  • 26500: Gateway gRPC API (this is one of the ports clients need to use)
  • 26501: Command API (internal, gateway-to-broker)
  • 26502: Internal API (internal, broker-to-broker)

Multi-platform support

With the Camunda 8.2.0 release and onward, all Camunda 8 Docker images are provided as multi-platform images. Your Docker client should automatically pull the image that suits your platform.

Use linux/amd64 for your production environment. The linux/arm64 image is provided for development purposes.


For Web Modeler, we only provide multi-platform images from the following releases onward: 8.2.8, 8.3.1, 8.4.0-alpha1.

Web Modeler


Web Modeler Self-Managed is available to enterprise customers only.

The Docker images for Web Modeler are not publicly accessible, but available to enterprise customers only from Camunda's private Docker registry.

Web Modeler ComponentDocker image
Backend (restapi)
Frontend (webapp)

To pull the images you first need to log in using the credentials you received from Camunda:

$ docker login
Username: your_username
Password: ******
Login Succeeded

You can also find more information on the supported configuration variables.

Configuration hints



The default data volume is under /usr/local/zeebe/data. It contains all data which should be persisted.


The Zeebe configuration is located at /usr/local/zeebe/config/application.yaml. The logging configuration is located at /usr/local/zeebe/config/log4j2.xml.

The configuration of the Docker image can also be changed using environment variables. The configuration template file also contains information on the environment variables to use for each configuration setting.

Available environment variables:

  • ZEEBE_LOG_LEVEL - Sets the log level of the Zeebe Logger (default: info).
  • ZEEBE_BROKER_NETWORK_HOST - Sets the host address to bind to instead of the IP of the container.
  • ZEEBE_BROKER_CLUSTER_INITIALCONTACTPOINTS - Sets the contact points of other brokers in a cluster setup.


Some configuration properties are optional and have default values. See a description of these properties and their default values in the table below:

NameDescriptionDefault value
SPRING_PROFILES_ACTIVEDetermines the mode Optimize is to be run in. For Self-Managed, set to ccsm.
CAMUNDA_OPTIMIZE_DATABASEDetermines the database Optimize will use. Allowed values: elasticsearch or opensearchelasticsearch
CAMUNDA_OPTIMIZE_IDENTITY_ISSUER_URLThe URL at which Identity can be accessed by Optimize.
CAMUNDA_OPTIMIZE_IDENTITY_ISSUER_BACKEND_URLThe URL at which the Identity auth provider can be accessed by Optimize. This should match the configured provider in Identity and is to be used for container to container communication.
CAMUNDA_OPTIMIZE_IDENTITY_CLIENTIDThe Client ID used to register Optimize with Identity.
CAMUNDA_OPTIMIZE_IDENTITY_CLIENTSECRETThe secret used when registering Optimize with Identity.
CAMUNDA_OPTIMIZE_IDENTITY_AUDIENCEThe audience used when registering Optimize with Identity.
OPTIMIZE_ELASTICSEARCH_HOST*The address/hostname under which the Elasticsearch node is available.localhost
OPTIMIZE_ELASTICSEARCH_HTTP_PORT*The port number used by Elasticsearch to accept HTTP connections.9200
CAMUNDA_OPTIMIZE_OPENSEARCH_HOST**The address/hostname under which the OpenSearch node is available.localhost
CAMUNDA_OPTIMIZE_OPENSEARCH_HTTP_PORT **The port number used by OpenSearch to accept HTTP connections.9205
CAMUNDA_OPTIMIZE_SECURITY_AUTH_COOKIE_SAME_SITE_ENABLEDDetermines if same-site is enabled for Optimize cookies. This must be set to false.true
CAMUNDA_OPTIMIZE_ELASTICSEARCH_SECURITY_USERNAME *The username for authentication in environments where a secured Elasticsearch connection is configured.
CAMUNDA_OPTIMIZE_ELASTICSEARCH_SECURITY_PASSWORD *The password for authentication in environments where a secured Elasticsearch connection is configured.
CAMUNDA_OPTIMIZE_OPENSEARCH_SECURITY_USERNAME**The username for authentication in environments where a secured OpenSearch connection is configured.
CAMUNDA_OPTIMIZE_OPENSEARCH_SECURITY_PASSWORD**The password for authentication in environments where a secured OpenSearch connection is configured.
CAMUNDA_OPTIMIZE_ENTERPRISEThis should only be set to true if an Enterprise License has been acquired.true
CAMUNDA_OPTIMIZE_ZEEBE_ENABLEDEnables import of Zeebe data in Optimize.false
CAMUNDA_OPTIMIZE_ZEEBE_NAMEThe record prefix for exported Zeebe records.zeebe-record
CAMUNDA_OPTIMIZE_ZEEBE_PARTITION_COUNTThe number of partitions configured in Zeebe.1
CAMUNDA_OPTIMIZE_SHARING_ENABLEDEnable/disable the possibility to share reports and dashboards.true
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URIAuthentication for the Public REST API using a resource server to validate the JWT token. Complete URI to get public keys for JWT validation.null
OPTIMIZE_API_ACCESS_TOKENAuthentication for the Public REST API using a static shared token. Will be ignored if SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI is also set.null
CAMUNDA_OPTIMIZE_CONTAINER_ENABLE_SNI_CHECKDetermines whether SNI checking should be enabled.true

* Only relevant when CAMUNDA_OPTIMIZE_DATABASE is either undefined or has the value elasticsearch.
** Only relevant when CAMUNDA_OPTIMIZE_DATABASE has the value opensearch.


OpenSearch support in Optimize is limited to data import and the raw data report. The remaining functionality will be delivered with upcoming patches.

Like for example this docker-compose configuration:

container_name: optimize
image: camunda/optimize:latest
- 8090:8090
- CAMUNDA_OPTIMIZE_IDENTITY_ISSUER_BACKEND_URL=http://keycloak:8080/auth/realms/camunda-platform

Self-Managed Optimize must be able to connect to the configured database to write and read data. In addition, Optimize needs to connect to Identity for authentication purposes. Both of these requirements can be configured with the options described above.

Optimize must also be configured as a client in Identity, and users will only be granted access to Optimize if they have a role that has write:* permission for Optimize.

For Optimize to import Zeebe data, Optimize must also be configured to be aware of the record prefix used when the records are exported to the database. This can also be configured per the example above.


Use the provided Docker Compose files to execute all out-of-the-box Connectors automatically. This uses the Connectors Bundle Docker image.

Note that some out-of-the-box Connectors are licensed under the Camunda Self-Managed Free Edition license. Find an overview in the Connectors Bundle project.

Refer to the Connector installation guide for details on how to provide the Connector templates for modeling.

Running single Connectors container

docker run --rm --name=MyConnectorsInstance \
--network=camunda-platform_camunda-platform \

Custom set of Connectors

To add custom Connectors, you can build on top of our Connectors base image that includes the pre-packaged runtime environment without any Connector. To use the image, at least one Connector must be added to the classpath. We recommend providing JARs with all dependencies bundled.


As all Connectors share a single classpath, different versions of the same dependency can be available and cause conflicts. To prevent this, common dependencies like jackson can be shaded and relocated inside the Connector's JAR.

You can add a Connector JAR by extending the base image with a JAR from a public URL:

FROM camunda/connectors:x.y.z

ADD /opt/app/

You can also add a Connector JAR using volumes:

docker run --rm --name=connectors -d -v $PWD/connector.jar:/opt/app/ camunda/connectors:x.y.z