Repro steps
- Clone the repository.
- Copy
.env.sqlite.example to .env.
- For local-only access, set
CODEX_BIND=127.0.0.1 as suggested by the .env.sqlite.example comment.
- Start the lightweight Docker deployment with
docker compose -f docker-compose.sqlite.yml up -d.
- Run
curl http://127.0.0.1:8080/health.
Observed behavior
The container starts and logs Listen: 127.0.0.1:8080, but the host request returns curl: (52) Empty reply from server. Docker port publishing cannot reach the service because the process only listens on the container loopback interface.
Expected behavior
For Docker deployments, the app should listen on 0.0.0.0 inside the container while host exposure is restricted with the compose host bind setting. Local-only host access works with:
BIND_HOST=127.0.0.1
CODEX_BIND=0.0.0.0
Affected files/commands
.env.sqlite.example comment around CODEX_BIND
docker-compose.sqlite.yml port mapping uses ${BIND_HOST:-0.0.0.0}
- Same pattern appears in other compose files
Temporary workaround used
Keep BIND_HOST=127.0.0.1 for host-side restriction and leave CODEX_BIND=0.0.0.0 inside the container. After recreating the container, /health returns {"available":0,"status":"ok","total":0}.
Repro steps
.env.sqlite.exampleto.env.CODEX_BIND=127.0.0.1as suggested by the.env.sqlite.examplecomment.docker compose -f docker-compose.sqlite.yml up -d.curl http://127.0.0.1:8080/health.Observed behavior
The container starts and logs
Listen: 127.0.0.1:8080, but the host request returnscurl: (52) Empty reply from server. Docker port publishing cannot reach the service because the process only listens on the container loopback interface.Expected behavior
For Docker deployments, the app should listen on
0.0.0.0inside the container while host exposure is restricted with the compose host bind setting. Local-only host access works with:Affected files/commands
.env.sqlite.examplecomment aroundCODEX_BINDdocker-compose.sqlite.ymlport mapping uses${BIND_HOST:-0.0.0.0}Temporary workaround used
Keep
BIND_HOST=127.0.0.1for host-side restriction and leaveCODEX_BIND=0.0.0.0inside the container. After recreating the container,/healthreturns{"available":0,"status":"ok","total":0}.