Container Startup
Diagnosing and resolving container startup issues for ActionsManager Self-Hosted.
Quick Diagnostics
Section titled “Quick Diagnostics”Run these commands first for any startup issue:
# Check if the container is runningdocker ps --filter name=actions-manager
# View recent logsdocker logs actions-manager --tail=100
# Check port availabilitycurl -I http://localhost:8080For Docker Compose:
docker compose -f docker-compose.self-hosted.yml psdocker compose -f docker-compose.self-hosted.yml logs --tail=100Container Fails to Start
Section titled “Container Fails to Start”Port 8080 Already in Use
Section titled “Port 8080 Already in Use”Symptom: Container exits immediately or port binding fails.
Solution:
# Find what is using port 8080lsof -i :8080# orss -tlnp | grep 8080
# Stop the conflicting service, or run ActionsManager on a different port:docker run -p 9090:8080 ... # map host port 9090 to container port 8080Missing or Invalid SECRET_KEY
Section titled “Missing or Invalid SECRET_KEY”Symptom: Container starts but immediately fails with a configuration error.
Solution: Ensure SECRET_KEY is set when running the container. Generate a stable value once and reuse it on every restart:
# Generate once and store it (do not regenerate on every run)openssl rand -hex 32Then pass it as an environment variable:
-e SECRET_KEY=<your_generated_key>Warning: Changing SECRET_KEY on a running deployment will invalidate all existing sessions and saved tokens.
Non-Local HTTP APP_URL Rejected
Section titled “Non-Local HTTP APP_URL Rejected”Symptom: The container exits on first boot and the logs show:
APP_URL='http://192.168.1.100:8080' is non-local plain HTTP. This is insecure —tokens and credentials would be transmitted in cleartext. Either switch tohttps:// or set ALLOW_INSECURE_HTTP=true to allow it.Cause: APP_URL points at a non-loopback address over plain http://. localhost, 127.0.0.1, and ::1 are exempt; anything else needs an explicit opt-in.
Solution: Put ActionsManager behind an HTTPS reverse proxy and use an https:// APP_URL (see HTTPS Setup). To keep running over plain HTTP on a trusted network, add:
-e ALLOW_INSECURE_HTTP=trueThe same flag also re-enables PAT login over non-local HTTP, which is blocked by default.
Volume Mount Permission Error
Section titled “Volume Mount Permission Error”Symptom: Container fails with a permissions error when writing to the data volume.
Solution:
# Check the volumedocker volume inspect actions-manager-data
# Remove and recreate the volume (this deletes all data)docker volume rm actions-manager-datadocker volume create actions-manager-dataContainer Starts but UI is Inaccessible
Section titled “Container Starts but UI is Inaccessible”Checking Service Health
Section titled “Checking Service Health”# Check backend API health - proxies to the backend's own health route,# so it fails if uvicorn is down even though nginx is still upcurl http://localhost:8080/healthz
# Check frontend static files are served - nginx serves these directly and# will return 200 even if the backend is down, so this alone does not# confirm the app is actually workingcurl -I http://localhost:8080If the backend health check fails, review logs for startup errors:
docker logs actions-manager --tail=200Database Initialization Errors
Section titled “Database Initialization Errors”Symptom: Logs show database migration or initialization errors.
Solution:
- Check if the data volume is mounted correctly
- Check disk space:
df -h - If the database is corrupted, back up the volume and reinitialize:
# Stop the containerdocker stop actions-manager
# Inspect the volume pathdocker volume inspect actions-manager-data
# Restart — the application will attempt to reinitialize the databasedocker start actions-managerEnvironment Variable Issues
Section titled “Environment Variable Issues”Required Environment Variables
Section titled “Required Environment Variables”Ensure these are set before starting the container:
| Variable | Required | Description |
|---|---|---|
INSTALLATION_MODE |
Yes | Set to self-hosted |
SECRET_KEY |
Yes | Random secret for session encryption |
VITE_BACKEND_URL |
Yes | URL where the backend is accessible |
VITE_FRONTEND_URL |
Yes | URL where the frontend is accessible |
VITE_WEBSOCKET_URL |
Yes | WebSocket URL (ws:// prefix) |
GITHUB_CLIENT_ID |
OAuth only | GitHub OAuth App client ID |
GITHUB_CLIENT_SECRET |
OAuth only | GitHub OAuth App client secret |
Checking Environment Variables in a Running Container
Section titled “Checking Environment Variables in a Running Container”docker exec actions-manager env | grep -E 'INSTALLATION_MODE|VITE_|GITHUB_CLIENT'Memory and Disk Issues
Section titled “Memory and Disk Issues”# Check memoryfree -h
# Check disk spacedf -h
# Check container resource usagedocker stats actions-managerActionsManager requires at least 4 GB RAM. If the container is OOM-killed, increase available memory or add a swap file.
Getting More Help
Section titled “Getting More Help”If you cannot resolve the issue:
- Collect logs:
docker logs actions-manager > actions-manager.log 2>&1 - Review the Common Errors page
- Check GitHub Issues for similar reports
- Open a new issue with your logs (redact all secrets and tokens before posting)
Related Topics
Section titled “Related Topics”- Common Errors — authentication, API, and workflow errors
- GitHub Permissions — permission requirements
- Installation — installation guide
© 2026 ActionsManager. All rights reserved.