Docker Compose
Docker Compose starts Workbench, Server, Runtime, Notebooks, and optional Grafana on one ecosystem network. Scoring is the Runtime on 8091 (POST /invocations, then POST /response). Grafana on 3000 is infra charts, not the Runtime Dashboard.
After start.sh (or docker compose up), log in on port 80, then follow Post-install and score a campaign. Hosted demo if you are not running locally: https://medemo.ecosystem.ai .
Ports in this file: Workbench 80, Server 3001, first Runtime 8091, extra Runtimes 8092–8095, Notebooks 5111 / 8010, Grafana 3000. Port 8092 here is a second scoring Runtime, not MCP. Builtin MCP is POST http://127.0.0.1:8091/mcp. Overview: Quick Start.
Service map
The YAML file defines multiple Docker services on a common network named ecosystem. Here is a breakdown of what each segment of code means:
The YAML file is a Docker Compose configuration file which defines multiple Docker services to be run together, connected by a common network named ‘ecosystem’. Here is a breakdown of what each segment of code means:
-
All container services are part of the
ecosystemnetwork. This allows them to communicate with each other. -
ecosystem-workbench: This service runs the Docker imageecosystemai/ecosystem-workbench:arm64and is namedecosystem-workbenchon creation. It restarts unless manually stopped. It depends on other services which are specified independs_on. Environment variables such as ‘IP’ and ‘PORT’ are set here - these are passed into the container on start-up. Note that arm64 is the architecture of the image, andlatestis for x86 or AMD. -
ecosystem-server: Runs theecosystemai/ecosystem-server:arm64Docker image. This service exposes several ports, uses several environment variables, and mounts the local directory specified byDATA_PATHto/datainside the container. Database files and other accessible data files are stored in this directory. -
ecosystem-runtime-solo,ecosystem-runtime-solo2,ecosystem-runtime-solo3,ecosystem-runtime-solo4,ecosystem-runtime-solo5: These five services use theecosystemai/ecosystem-runtime-solo:arm64Docker image. Each one runs on its own unique port, and each one depends on theecosystem-serverservice. This allows for ‘permanently in production’ runtime services to be run alongside the server. -
ecosystem-notebooks: This service runs theecosystemai/ecosystem-notebooks:arm64image, and mounts several directories from the host to the container. -
ecosystem-grafana: This service runs theecosystemai/ecosystem-grafana:arm64Docker image. Grafana is a tool for visualizing data, and this service exposes port 3000.
All services use the environment variable ECOSYSTEM_API_KEY, which has to be provided when you start the Docker Compose stack. Other environment variables are contextual to each service.
The networks field defines a network used by the services. In this case, the ecosystem network is marked as external, which indicates that the network has been created outside of this Docker Compose file and needs to already exist before the command docker-compose up is run. If other ecosystem.Ai services are running on the same network, they will be able to communicate with these services.
The following environment variables have to be set before running the Docker Compose stack:
DATA_PATH=
OPENAI_API_KEY=
ECOSYSTEM_API_KEY=An optional variable is used to assign an initial password on startup.
INITIAL_PASSWORD=Here is an example of a Docker Compose file for ecosystem.Ai:
services:
ecosystem-workbench:
image: ecosystemai/ecosystem-workbench:arm64
container_name: ecosystem-workbench
restart: unless-stopped
environment:
IP: ${SERVER}
PORT: 3001
networks:
- ecosystem
ports:
- "80:80"
depends_on:
- ecosystem-server
- ecosystem-runtime-solo
- ecosystem-runtime-solo2
- ecosystem-runtime-solo3
- ecosystem-notebooks
- ecosystem-grafana
ecosystem-server:
image: ecosystemai/ecosystem-server:arm64
container_name: ecosystem-server
restart: unless-stopped
environment:
CLOUD: "none"
MASTER_KEY: ${ECOSYSTEM_API_KEY}
OPENAI_API_KEY: ${OPENAI_API_KEY}
INITIAL_PASSWORD: ${INITIAL_PASSWORD}
IP: ${SERVER}
PORT: 3001
RESET_USER: "true"
NO_WORKBENCH: "true"
volumes:
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "3001:3001"
- "54445:54445"
- "54321:54321"
ecosystem-runtime-solo:
image: ecosystemai/ecosystem-runtime-solo:arm64
container_name: ecosystem-runtime
restart: unless-stopped
environment:
MASTER_KEY: ${ECOSYSTEM_API_KEY}
NO_MONGODB: 'true'
FEATURE_DELAY: 99999
MONITORING_DELAY: 120
volumes:
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "8091:8091"
depends_on:
- ecosystem-server
ecosystem-runtime-solo2:
image: ecosystemai/ecosystem-runtime-solo:arm64
container_name: ecosystem-runtime2
restart: unless-stopped
environment:
MASTER_KEY: ${ECOSYSTEM_API_KEY}
NO_MONGODB: 'true'
FEATURE_DELAY: 99999
MONITORING_DELAY: 240
PORT: 8092
volumes:
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "8092:8092"
depends_on:
- ecosystem-server
ecosystem-runtime-solo3:
image: ecosystemai/ecosystem-runtime-solo:arm64
container_name: ecosystem-runtime3
restart: unless-stopped
environment:
MASTER_KEY: ${ECOSYSTEM_API_KEY}
NO_MONGODB: 'true'
FEATURE_DELAY: 99999
MONITORING_DELAY: 240
PORT: 8093
volumes:
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "8093:8093"
depends_on:
- ecosystem-server
ecosystem-runtime-solo4:
image: ecosystemai/ecosystem-runtime-solo:arm64
container_name: ecosystem-runtime4
restart: unless-stopped
environment:
MASTER_KEY: ${ECOSYSTEM_API_KEY}
NO_MONGODB: 'true'
FEATURE_DELAY: 99999
MONITORING_DELAY: 240
PORT: 8094
volumes:
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "8094:8094"
depends_on:
- ecosystem-server
ecosystem-runtime-solo5:
image: ecosystemai/ecosystem-runtime-solo:arm64
container_name: ecosystem-runtime5
restart: unless-stopped
environment:
MASTER_KEY: ${ECOSYSTEM_API_KEY}
NO_MONGODB: 'true'
FEATURE_DELAY: 99999
MONITORING_DELAY: 240
PORT: 8095
volumes:
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "8095:8095"
depends_on:
- ecosystem-server
ecosystem-notebooks:
image: ecosystemai/ecosystem-notebooks:arm64
container_name: ecosystem-notebooks
restart: unless-stopped
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
volumes:
- ${DATA_PATH}/notebooks-users/notebooks:/app/Shared Projects
- ${DATA_PATH}/notebooks-users:/home
- ${DATA_PATH}:/data
networks:
- ecosystem
ports:
- "5111:8000"
- "8010:8010"
depends_on:
- ecosystem-server
ecosystem-grafana:
image: ecosystemai/ecosystem-grafana:arm64
container_name: ecosystem-worker-grafana
restart: unless-stopped
environment:
GF_SECURITY_ALLOW_EMBEDDING: "true"
networks:
- ecosystem
ports:
- "3000:3000"
depends_on:
- ecosystem-server
networks:
ecosystem:
external: trueAdditional variables can be set for the runtime engine.
After the stack is up
- Change the default Workbench password (
admin@ecosystem.ai/password). - Open the Runtime Dashboard against 8091.
- Invoke a campaign, then Accept (
POST /response). - Optional: campaign BDD, ontology for agents.