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
- Check out tag
v2.43.0.
- Generate the compatibility manifest, build the repository Docker image, bootstrap the data-plane token, and start the supplied Compose service.
- Place a valid
opencodex-catalog.json in the persisted ocx-state directory at /home/bun/.opencodex.
- Confirm
GET /healthz and GET /readyz return 200.
- 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
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.jsonbecauseCODEX_HOMEis not set.The Compose service also uses
read_only: trueand does not mount/home/bun/.codex. This leaves the default catalog location outside the only writable persistent volume.The hub starts normally and
/healthzand/readyzreturn 200, but the documented authenticated/v1/catalogacceptance check returns 404 even when a valid catalog exists in the persistedocx-statedirectory.I expected the repository-maintained Docker deployment to keep the model catalog in a writable persistent location that
/v1/catalogcan read.Reproduction
v2.43.0.opencodex-catalog.jsonin the persistedocx-statedirectory at/home/bun/.opencodex.GET /healthzandGET /readyzreturn 200.GET /v1/catalogrequest.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:
After recreating the container with this environment setting, the same authenticated
/v1/catalogrequest returns 200. Real routed OpenAI Responses and Gemini requests also continue to work.Version
OpenCodex
v2.43.0, commit06ec553630fa2ee51a96b5cbf694089021249194.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
Redacted configuration
The Dockerfile sets
OPENCODEX_HOME=/home/bun/.opencodexbut does not setCODEX_HOME.Checks