Files
conductor-oss--conductor/docker/docker-compose-postgres-es7.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

87 lines
1.9 KiB
YAML

version: '2.3'
services:
conductor-server:
environment:
- CONFIG_PROP=config-postgres-es7.properties
image: conductor:server
container_name: conductor-server
build:
context: ../
dockerfile: docker/server/Dockerfile
args:
YARN_OPTS: ${YARN_OPTS}
networks:
- internal
ports:
- 8000:8080
- 8127:5000
healthcheck:
test: [ "CMD", "curl","-I" ,"-XGET", "http://localhost:8080/health" ]
interval: 60s
timeout: 30s
retries: 12
links:
- conductor-postgres:postgresdb
- conductor-elasticsearch:es
depends_on:
conductor-postgres:
condition: service_healthy
conductor-elasticsearch:
condition: service_healthy
logging:
driver: "json-file"
options:
max-size: "1k"
max-file: "3"
conductor-postgres:
image: postgres:16
environment:
- POSTGRES_USER=conductor
- POSTGRES_PASSWORD=conductor
volumes:
- pgdata-conductor:/var/lib/postgresql/data
networks:
- internal
healthcheck:
test: timeout 5 bash -c 'cat < /dev/null > /dev/tcp/localhost/5432'
interval: 5s
timeout: 5s
retries: 12
logging:
driver: "json-file"
options:
max-size: "1k"
max-file: "3"
conductor-elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.11
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx1024m"
- xpack.security.enabled=false
- discovery.type=single-node
volumes:
- esdata-conductor:/usr/share/elasticsearch/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:
pgdata-conductor:
driver: local
esdata-conductor:
driver: local
networks:
internal: