Skip to content

fix(install): pre-create ~/.continuum/sockets before docker compose up#1481

Merged
joelteply merged 1 commit into
canaryfrom
fix/install-precreate-socket-dirs
May 30, 2026
Merged

fix(install): pre-create ~/.continuum/sockets before docker compose up#1481
joelteply merged 1 commit into
canaryfrom
fix/install-precreate-socket-dirs

Conversation

@joelteply
Copy link
Copy Markdown
Contributor

Summary

continuum-core's IPC server crashes at startup with IPC server error: No such file or directory (os error 2) because the host bind mount (~/.continuum:/root/.continuum) overlays the Dockerfile's image-time mkdir -p /root/.continuum/sockets. install.sh now pre-creates the directory tree on the host BEFORE compose up, so the mount delivers a populated dir to the container.

Trace from canary install-smoke (#1480 today)

17:40:25 — continuum-core: All 28 modules initialized, tick loops started
17:40:25 — ❌ IPC server error: No such file or directory (os error 2)
17:40:26 — Container Error / Waiting → healthcheck never passes
17:40:26 — dependency failed to start: container continuum-core-1 is unhealthy
17:40:26 — install.sh exits at "start support services" phase (exit 1)

The Dockerfile creates /root/.continuum/sockets at build time:

RUN mkdir -p /root/.continuum/sockets /root/.continuum/jtag/data /root/.continuum/jtag/logs

But docker-compose.yml mounts the host directory:

volumes:
  - ~/.continuum:/root/.continuum

The bind mount overlays the image's dir tree. The build-time mkdir is shadowed by the host's ~/.continuum (which on a fresh install/runner is just the empty mkdir -p $CONTINUUM_DATA install.sh already does). continuum-core then fails to bind its socket because the parent dir doesn't exist.

Fix

install.sh's existing mkdir -p "$CONTINUUM_DATA" (line 780) is expanded to also create sockets/, jtag/data/, jtag/logs/ — the same set the Dockerfile creates internally. The mount then carries them into the container.

Why install.sh-side, not Dockerfile-side

The bind mount is the OVERLAYING layer; whatever the Dockerfile does at image build is hidden inside the container at runtime when a mount covers the same path. The canonical fix is to ensure the host directory tree exists before the mount activates.

Was this masked by something?

Yes — install-smoke runs were hitting the slower silent-downgrade-to-build path (PR #1480 just fixed). The 25-min cargo build timeout was masking this socket-dir failure mode. Now that #1480's precheck + canary-default routing makes the run fast, the underlying bug surfaces with a clear 3-min diagnostic.

Test plan

continuum-core's Dockerfile creates /root/.continuum/sockets at image
build time, but docker-compose.yml mounts the host's ~/.continuum
onto /root/.continuum at container start. The mount overlays the
image's directory tree — the sockets/ subdir created at build is
invisible inside the running container. continuum-core then tries
to bind its IPC socket at /root/.continuum/sockets/continuum-core.sock,
which fails with "IPC server error: No such file or directory
(os error 2)" because the parent dir doesn't exist.

Symptom: continuum-core never goes healthy → node-server's depends_on
(condition: service_healthy) fails → docker compose up exits 1 with
"dependency failed to start: container continuum-core-1 is unhealthy".

Concrete trace from canary install-smoke for PR #1480 today:
  17:40:25 — All 28 modules initialized, tick loops started
  17:40:25 — ❌ IPC server error: No such file or directory (os error 2)
  17:40:26 — Container Error / Waiting → Healthcheck never passes
  install.sh exits at "start support services" phase

This bug has been silently blocking install-smoke for any docker-stack-
touching PR; the previous 25-min cargo-build timeout was masking it
because the install never got far enough to discover the socket issue.
Now that PR #1480's precheck + canary-default routing makes the run
fast, the underlying problem surfaces in 3 minutes with a clear error.

Fix: pre-create the host-side directory tree (sockets/, jtag/data/,
jtag/logs/) BEFORE compose up. This way the bind mount delivers a
populated /root/.continuum to the container and continuum-core can
bind its socket on first start.

This is install.sh-side, not Dockerfile-side, because the mount is the
overlaying layer — image-build mkdirs are hidden by the bind. The
canonical fix is to mkdir on the host (which is what gets mounted).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@joelteply joelteply merged commit ea218b8 into canary May 30, 2026
3 checks passed
@joelteply joelteply deleted the fix/install-precreate-socket-dirs branch May 30, 2026 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant