Troubleshooting
Fix common deployment, login, mount, upload, preview, and WebSocket issues.
Troubleshooting
Container Fails to Start
The default compose file publishes BoxBox on HOST_PORT, which defaults to 8080. If the container fails to start, check whether that host port is already in use:
docker compose ps
docker compose logs -f filemanager
Change the published port in .env if needed:
HOST_PORT=8081
docker compose up -d
Login Uses admin:admin
That means no users were configured. Set a user through env or YAML:
FM_USERS_admin="a-long-password"
users:
admin: "a-long-password"
Restart after changing credentials.
jwt_secret is required
Set FM_JWT_SECRET or jwt_secret in config.yaml:
FM_JWT_SECRET="$(openssl rand -base64 32)"
Mount Point Does Not Show Up
Check that the path exists inside the container:
docker compose exec filemanager ls -la /home/user
docker compose exec filemanager ls -la /media/devmon
Remember that config.yaml paths are container paths, not host paths.
Permission Denied
Check host permissions and whether the container path is mounted read-only:
ls -la /path/on/host
docker compose exec filemanager id
docker compose exec filemanager ls -la /path/in/container
For sensitive paths, prefer keeping the mount read-only rather than expanding container permissions.
Upload Fails
Check:
- The destination mount is not
read_only. /tmp/filemanagerhas enough space for chunks.- Your reverse proxy request size limit allows the upload.
max_upload_mbis large enough.- The browser request includes
X-Chunk-SizeandX-Total-Size.
Logs:
docker compose logs -f filemanager
Preview or Download Fails
Preview and download endpoints require a valid token. The web app appends a token query parameter automatically for direct media URLs.
Direct API callers can use:
Authorization: Bearer <access-token>
Or:
/api/v1/stream/preview/home/video.mp4?token=<access-token>
WebSocket Does Not Connect
Check:
- The URL is
/api/v1/ws. - A token is supplied as
?token=orAuthorization: Bearer. - Your reverse proxy forwards WebSocket upgrade headers.
allowed_originsincludes the browser origin if you configured an allow-list.
Frontend Is Blank in a Built Container
Rebuild the image so the SvelteKit static output is copied into the Go build stage:
docker build --no-cache -t boxbox:local .
If running the backend directly from source, build the frontend first if you expect embedded static assets:
bun run --cwd frontend build
Health Check
Use either endpoint:
curl http://localhost:8080/health
curl http://localhost:8080/api/v1/health
Expected response:
{"status":"ok"}