Files
conductor-oss--conductor/docker/docker-compose-redis-os3.yaml
Naomi Most 343447f67a fix: OpenSearch OOM kills, postgres:latest pin, and startup.sh flag ordering (#1043)
* fix: docker image now starts with SQLite by default when CONFIG_PROP is unset

Previously, startup.sh always passed -DCONDUCTOR_CONFIG_FILE pointing at
the bundled config.properties, which ships with conductor.db.type commented
out. This suppressed the JAR's built-in SQLite default, causing persistence
to fail on a bare `docker run -p 8080:8080 conductoross/conductor:latest`.

Now: if CONFIG_PROP is unset, the JAR is launched without -DCONDUCTOR_CONFIG_FILE
and uses its built-in defaults (SQLite, no external dependencies). If CONFIG_PROP
is set, the named config under /app/config/ is passed exactly as before — all
docker-compose setups are unaffected.

Fixes #1041. Prerequisite for deprecating conductoross/conductor-standalone
(conductor-oss/getting-started#7, sunset 2026-07-24).

* fix: pin postgres:16 and add OpenSearch heap limits in docker-compose files

Three compose files set OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m (redis-os,
redis-os2, redis-os3) to match the existing ES_JAVA_OPTS limits on ES7/ES8;
without it OpenSearch auto-allocates heap and gets OOM-killed on constrained
hosts.

docker-compose-postgres-es7.yaml pins postgres to :16 (was untagged :latest,
now resolved to PG18) which caused data-directory version conflicts when run
after any other postgres compose setup.

All 9 docker-compose configurations tested healthy end-to-end after these fixes.

* fix: restore file-storage bind mount and fix -DCONDUCTOR_CONFIG_FILE placement in startup.sh

- startup.sh: move -DCONDUCTOR_CONFIG_FILE before -jar so it is treated
  as a JVM system property (not a program argument). The previous version
  silently dropped the config file when CONFIG_PROP was set, preventing
  conductor.file-storage.enabled=true from taking effect and causing
  FileResource controller to not register (/api/files → 404).
- docker-compose-es8.yaml: restore the /tmp/conductor-file-storage-e2e
  bind mount that was lost in the merge from main.
- run_tests-es8.sh: restore STORAGE_DIR setup (mkdir) that was also lost
  in the merge from main.

These were regressions introduced during the Merge branch main into
fix/docker-startup-sqlite-default commit (3e94bf7bd).

* test: fix flaky PostgresQueueListenerTest by awaiting notification delivery

pg_notify delivery requires a JDBC round-trip; a bare assertTrue immediately
after sendNotification races the socket flush. Use await() with a 500 ms
timeout, consistent with the other notification tests in this file.
2026-05-04 16:46:35 -07:00

81 lines
2.1 KiB
YAML

version: '2.3'
services:
conductor-server:
environment:
- CONFIG_PROP=config-redis-os3.properties
- JAVA_OPTS=-Dpolyglot.engine.WarnInterpreterOnly=false
image: conductor:server
container_name: conductor-server-os3
build:
context: ../
dockerfile: docker/server/Dockerfile
args:
YARN_OPTS: ${YARN_OPTS}
INDEXING_BACKEND: opensearch3
networks:
- internal
ports:
- 8000:8080
- 8128:5000
healthcheck:
test: ["CMD", "curl","-I" ,"-XGET", "http://localhost:8080/health"]
interval: 60s
timeout: 30s
retries: 12
links:
- conductor-opensearch:os
- conductor-redis:rs
depends_on:
conductor-opensearch:
condition: service_healthy
conductor-redis:
condition: service_healthy
logging:
driver: "json-file"
options:
max-size: "1k"
max-file: "3"
conductor-redis:
image: redis:6.2.3-alpine
volumes:
- ../server/config/redis.conf:/usr/local/etc/redis/redis.conf
networks:
- internal
healthcheck:
test: [ "CMD", "redis-cli","ping" ]
conductor-opensearch:
image: opensearchproject/opensearch:3.0.0
container_name: opensearch-3
environment:
- plugins.security.disabled=true
- cluster.name=opensearch-cluster # Name the cluster
- node.name=conductor-opensearch # Name the node that will run in this container
- discovery.seed_hosts=conductor-opensearch # Nodes to look for when discovering the cluster
- cluster.initial_cluster_manager_nodes=conductor-opensearch # Nodes eligible to serve as cluster manager
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=P4zzW)rd>>123_
- OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
- osdata3-conductor:/usr/share/opensearch/data
networks:
- internal
healthcheck:
test: curl http://localhost:9200/_cluster/health -o /dev/null
interval: 5s
timeout: 5s
retries: 12
logging:
driver: "json-file"
options:
max-size: "1k"
max-file: "3"
volumes:
osdata3-conductor:
driver: local
networks:
internal: