Skip to content

Let multiple demos run concurrently without colliding#358

Merged
JonJagger merged 1 commit into
mainfrom
isolate-demo-per-compose-project
Jun 9, 2026
Merged

Let multiple demos run concurrently without colliding#358
JonJagger merged 1 commit into
mainfrom
isolate-demo-per-compose-project

Conversation

@JonJagger

Copy link
Copy Markdown
Member

Each repo's demo brought up the same stack on fixed canonical host
ports (saver 4537, web 3000, ...), a hardcoded cyber-dojo network
name, and fixed container names. So a demo in one repo (e.g. web)
could not run while a demo in another (e.g. differ) was up: they
fought over the same host ports and shared network. The workaround
was to let the new demo nuke everything with docker rm -f.

Make each demo its own docker-compose project instead:

  • Drop the hardcoded network name and per-service container_name so Compose namespaces them by project (COMPOSE_PROJECT_NAME, default web). Override it to run a second web demo alongside the first.
  • Stop publishing web and saver to the host; only nginx needs a host port (CYBER_DOJO_NGINX_HOST_PORT). Backend services reach each other over the project's private network, so nothing else collides. asset_builder is left alone (not part of the demo; build_assets.sh needs its publish).
  • Replace demo.sh's global docker rm -f with a project-scoped compose down, so bringing up one demo no longer kills the others.

Container references in the helper scripts no longer assume fixed
names; they resolve by compose project+service label via a shared
service_container() in lib.sh. This also fixes copy_in_saver_test_data
which previously grepped the web_saver substring of the old name.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

  Each repo's demo brought up the same stack on fixed canonical host
  ports (saver 4537, web 3000, ...), a hardcoded `cyber-dojo` network
  name, and fixed container names. So a demo in one repo (e.g. web)
  could not run while a demo in another (e.g. differ) was up: they
  fought over the same host ports and shared network. The workaround
  was to let the new demo nuke everything with `docker rm -f`.

  Make each demo its own docker-compose project instead:
  - Drop the hardcoded network name and per-service container_name so
    Compose namespaces them by project (COMPOSE_PROJECT_NAME, default
    web). Override it to run a second web demo alongside the first.
  - Stop publishing web and saver to the host; only nginx needs a host
    port (CYBER_DOJO_NGINX_HOST_PORT). Backend services reach each
    other over the project's private network, so nothing else collides.
    asset_builder is left alone (not part of the demo; build_assets.sh
    needs its publish).
  - Replace demo.sh's global `docker rm -f` with a project-scoped
    `compose down`, so bringing up one demo no longer kills the others.

  Container references in the helper scripts no longer assume fixed
  names; they resolve by compose project+service label via a shared
  service_container() in lib.sh. This also fixes copy_in_saver_test_data
  which previously grepped the `web_saver` substring of the old name.

  Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@JonJagger JonJagger merged commit eb24e48 into main Jun 9, 2026
7 checks passed
@JonJagger JonJagger deleted the isolate-demo-per-compose-project branch June 9, 2026 06:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant