Troubleshooting
Common issues and their solutions.
Installation Issues
Docker Container Won't Start
Symptoms: Container exits immediately or fails health check
Solutions:
- Check logs:
docker-compose logs -f
Once the Manager is running, Settings → Logs shows the Manager's own log lines in-app, plus the OpenCode server's stdout/stderr, which the Manager captures in memory and does not forward to the container console — so those OpenCode-server lines are visible in-app only. If the container or the Manager itself fails before the Manager's HTTP server is up, use docker-compose logs; the in-app viewer has nothing to show at that point.
-
Verify Docker resources (2GB RAM minimum)
-
Check ports aren't in use:
lsof -i :5003
- Pull the image again:
docker compose pull
docker compose up -d
If you build from source, rebuild without cache instead: ./scripts/docker-upgrade.sh --full.
Installer Stops Before Starting
The installer checks Docker first and stops with the reason:
- Docker is required: install Docker Desktop (macOS, Windows) or Docker Engine (Linux)
- Docker is installed but not reachable: start Docker Desktop or the docker service; on Linux, make sure your user can run
docker infowithoutsudo - Docker Compose v2 is required: install the Compose plugin so
docker composeworks - Is a source checkout of OpenCode Manager:
OCM_DIRpoints at a clone of the repository. Keep updating the clone with./scripts/docker-upgrade.sh, or setOCM_DIRto another folder - Already installed from
<folder>: a source checkout's container is running. Keep using it, or stop it there withdocker compose downfirst. The installer starts with its own data and does not share the checkout's volumes - Already exists outside Docker Compose: a container named
opencode-managerwas started withdocker run. Remove it withdocker rm -f opencode-manager(its volumes are kept) and re-run the installer - Did not become healthy: check
cd ~/opencode-manager && docker compose logs. On Linux, aPUID/PGIDthat collides with an account in the image stops startup; removePUID/PGIDfrom.env, or set free ids
Reset a Broken OpenCode Binary
Symptoms: Container won't start after an OpenCode upgrade, or the OpenCode settings show a malformed binary
OpenCode versions installed from Settings live in their own named volume (opencode-bin); the bundled version is part of the image. On start, the entrypoint already removes a persisted binary that is malformed or outside the supported range. If a persisted version still misbehaves, remove only that volume so the container falls back to the bundled binary, without touching the workspace or database volumes:
docker-compose down
# <project> is the Compose project name, usually the directory containing docker-compose.yml
docker volume rm <project>_opencode-bin
docker-compose up -d
Or via the package scripts:
pnpm docker:down
docker volume rm <project>_opencode-bin
pnpm docker:up
Do not use docker-compose down -v (or pnpm docker:reset) here: that also deletes the workspace and database volumes.
Port Already in Use
Symptoms: Error about port 5003, 5004, 5100, or 5101 being in use
Docker Compose publishes the Manager (5003), the preview gateway (5004), and two dev-server ports (5100, 5101); startup fails if any of them is taken.
Solutions:
- Find process using the ports:
lsof -i :5003 -i :5004 -i :5100 -i :5101
- Stop the process or change port in
docker-compose.yml:
ports:
- "8080:5003" # Use different host port
Then add the new URL to the allowed origins in .env, or sign-in fails with an invalid-origin error:
AUTH_TRUSTED_ORIGINS=http://localhost:8080
PASSKEY_ORIGIN=http://localhost:8080
If you remap the preview port (5004), set PREVIEW_PUBLIC_URL to the new public origin of the preview gateway.
Permission Denied Errors
Symptoms: Container can't write to volumes
Startup tolerates workspace directories that already exist with wrong ownership; permission errors then appear on the first write into the directory rather than at startup.
Solutions:
- In Docker, the entrypoint re-owns
/app/dataand/workspaceon every start, so a host-sidechownis overwritten. When you bind-mount a host directory withOCM_WORKSPACE_HOST_PATH, setPUIDandPGIDin.envto the host user that owns it:
PUID=1000
PGID=1000
- For local development, fix ownership of the local directories:
sudo chown -R $(id -u):$(id -g) ./workspace ./data
Authentication Issues
Can't Log In
Solutions:
- Clear browser cookies
- Try incognito/private mode
- Outside Docker, check
AUTH_SECRETis set in production - Verify
AUTH_TRUSTED_ORIGINSincludes the exact URL in your address bar;localhostand127.0.0.1are different origins. Signing in from your phone athttp://<lan-ip>:5003needs that origin listed; the installer adds it when you allow network sign-in
Session Keeps Expiring
Solutions:
- Ensure
AUTH_SECRETis persistent across restarts. In Docker, the generated secret lives in theopencode-datavolume, so keep that volume - Check browser isn't blocking cookies
- Verify
AUTH_SECURE_COOKIES=falseif using HTTP
OAuth Redirect Error
Solutions:
- Verify callback URL matches exactly in provider settings
- Check for trailing slashes
- Ensure protocol matches (http vs https)
Passkey Not Working
Solutions:
- Verify
PASSKEY_RP_IDmatches your domain - Check
PASSKEY_ORIGINincludes correct protocol and port - Try a different browser
- Ensure WebAuthn is supported
Password Reset Not Working
Solutions:
- Set all required variables:
ADMIN_EMAIL=[email protected]
ADMIN_PASSWORD=new-password
ADMIN_PASSWORD_RESET=true
- Recreate the container so it picks up the new environment variables:
docker compose up -d --force-recreate app
- Remove
ADMIN_PASSWORD_RESET=trueand recreate the container again:
docker compose up -d --force-recreate app
Git Issues
Clone Fails for Private Repository
Solutions:
- Configure GitHub PAT in Settings > Git > Credentials
- Ensure PAT has
reposcope - Check PAT hasn't expired
Push/Pull Fails
Solutions:
- Verify GitHub PAT is valid
- Check PAT has write permissions
- Verify remote URL:
git remote -v
Worktree Creation Fails
Solutions:
- Ensure branch doesn't already exist
- Check disk space
- Verify repo isn't in detached HEAD state
Chat Issues
Messages Not Sending
Solutions:
- Check OpenCode server is running:
docker exec opencode-manager ps aux | grep opencode
- Verify model is configured
- Check API key is valid
Streaming Stops Unexpectedly
Solutions:
- Check network connection
- Look for errors in browser console (F12)
- Check container logs for errors
File Mentions Not Working
Solutions:
- Ensure repository is selected
- Check file exists
- Refresh the file browser
Custom commands missing from /
Commands load per project the first time OpenCode opens it, and the list refreshes automatically, including after a reconnect. Wait a moment or reload the page; restarting OpenCode is not needed.
File Browser Issues
Files Not Loading
Solutions:
- Refresh the page
- Check repository is properly cloned
- Verify workspace volume is mounted
Upload Fails
Solutions:
- Check file size
- Verify write permissions
- Check browser console for errors
Performance Issues
Slow Response Times
Solutions:
- Check Docker resources:
docker stats
- Clear old sessions
- Use
/compactto reduce session size
High Memory Usage
Solutions:
- Limit session count
- Delete unused sessions
- Restart container:
docker-compose restart
Database Errors
Solutions:
- Stop the container without removing it:
docker compose stop app
- Back up the data directory from the stopped container (
DATABASE_PATH=/app/data/opencode.dbin Compose), including any SQLite WAL/SHM sidecar files:
mkdir -p ./opencode-data-backup
docker cp opencode-manager:/app/data/. ./opencode-data-backup/
- Start the container again:
docker compose start app
Mobile Issues
Keyboard Doesn't Close
Solutions:
- Tap outside input field
- Update device OS
- Try Safari on iOS
PWA Won't Install
Solutions:
- iOS: Must use Safari
- Android: Must use Chrome
- Check HTTPS is enabled
Touch Gestures Not Working
Solutions:
- Start the swipe within 30px of the screen edge
- Swipe at least 80px
- Check no UI element is blocking
Stuck on an old version
Tap Reload in the update banner at the top of the app. If no banner appears, close and reopen the app.
Getting More Help
If your issue isn't covered:
- Check GitHub Issues
- Search GitHub Discussions
- Open a new issue with:
- Steps to reproduce
- Expected vs actual behavior
- Container logs:
docker-compose logs— required when the Manager fails to start; Settings → Logs in-app covers the same Manager lines plus captured OpenCode server output once the Manager is up - Browser console errors
- Environment info (OS, browser, Docker version)