Skip to content

[Bug]: Docker /v1/catalog uses an unpersisted read-only CODEX_HOME #3746

Description

@juzijia

Resolved in dev

#3788 (ad5285e415) persists the separate Codex home under the read-only container root. OCX and Codex authentication stores remain separate.

Verified against dev 5759d9ea2f1e7281cdc01eb9628f2e0a123fb59c. Original report by @juzijia. The attribution record was added in #3811.

Client or integration

Direct HTTP/API client

Area

Installation or packaging

Summary

The repository-maintained Docker deployment persists /home/bun/.opencodex, but the catalog resolver defaults to /home/bun/.codex/opencodex-catalog.json because CODEX_HOME is not set.

The Compose service also uses read_only: true and does not mount /home/bun/.codex. This leaves the default catalog location outside the only writable persistent volume.

The hub starts normally and /healthz and /readyz return 200, but the documented authenticated /v1/catalog acceptance check returns 404 even when a valid catalog exists in the persisted ocx-state directory.

I expected the repository-maintained Docker deployment to keep the model catalog in a writable persistent location that /v1/catalog can read.

Reproduction

  1. Check out tag v2.43.0.
  2. Generate the compatibility manifest, build the repository Docker image, bootstrap the data-plane token, and start the supplied Compose service.
  3. Place a valid opencodex-catalog.json in the persisted ocx-state directory at /home/bun/.opencodex.
  4. Confirm GET /healthz and GET /readyz return 200.
  5. Run an authenticated GET /v1/catalog request.

The request returns 404 because readCodexCatalogPath() resolves the catalog as /home/bun/.codex/opencodex-catalog.json, while the supplied Compose deployment persists only /home/bun/.opencodex.

Verified workaround:

services:
  hub:
    environment:
      CODEX_HOME: /home/bun/.opencodex

After recreating the container with this environment setting, the same authenticated /v1/catalog request returns 200. Real routed OpenAI Responses and Gemini requests also continue to work.

Version

OpenCodex v2.43.0, commit 06ec553630fa2ee51a96b5cbf694089021249194.

Operating system

Debian GNU/Linux 12 (bookworm), Linux x86_64, Docker Engine 28.5.2, Docker Compose 2.40.3.

Provider and model

Not provider-specific.

Logs or error output

GET /healthz       -> 200
GET /readyz        -> 200
GET /v1/catalog    -> 404

{"error":{"type":"invalid_request_error","code":"catalog_not_found","message":"no materialized catalog is available"}}

Redacted configuration

services:
  hub:
    read_only: true
    volumes:
      - ocx-state:/home/bun/.opencodex

The Dockerfile sets OPENCODEX_HOME=/home/bun/.opencodex but does not set CODEX_HOME.

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcatalogModel catalog, slugs, visibility, routed entriesinstallInstallation or packaging

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions