Troubleshooting
Common issues and their solutions when running Ops Atlas.
Cannot Connect to Docker Host
Symptom: Environment shows as offline, containers are not discovered.
Solutions:
Verify SSH credentials — Ensure the host, port, username, and private key (or password) are correct in the environment configuration.
Check Docker is listening — The Docker daemon must be accessible. Verify it is running on the remote host:
bashssh user@host "docker ps"Check the Docker port — If using TCP, confirm port
2375(or2376for TLS) is open:bashcurl http://host:2375/versionFirewall rules — Ensure the firewall on the Docker host allows inbound connections from the Ops Atlas backend on the SSH and Docker ports.
TIP
The SSH user must be a member of the docker group on the remote host, or have sudo access to run Docker commands.
Backend Won't Start
Symptom: Backend container exits immediately or shows connection errors in logs.
Solutions:
PostgreSQL not ready — Ensure the
postgrescontainer is healthy before the backend starts:bashdocker compose logs postgresDatabase URL incorrect — Verify
POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD, andPOSTGRES_PORTin your.envfile match the PostgreSQL container configuration.Missing JWT_SECRET — The backend will not start without a
JWT_SECRETvalue. Generate one:bashopenssl rand -base64 32Port conflict — Check that port
8090(or your configuredBACKEND_PORT) is not already in use:bashlsof -i :8090
DANGER
Never leave JWT_SECRET or ENCRYPTION_KEY empty. The application will fail to start or produce cryptographic errors at runtime.
Frontend Shows Blank Page
Symptom: Browser loads but the page is empty or shows a white screen.
Solutions:
API URL misconfigured — Open the browser developer console (F12) and check for failed network requests. The frontend must be able to reach the backend API.
CORS not configured — If the frontend and backend are on different origins, ensure
CORS_ALLOWED_ORIGINSincludes the frontend URL:CORS_ALLOWED_ORIGINS=https://ops.example.comReverse proxy not forwarding — If behind Nginx or Traefik, verify the proxy passes requests to the correct backend port and preserves headers.
Browser cache — Hard-refresh (
Ctrl+Shift+R) or clear the browser cache after an upgrade.
Deployment Fails
Symptom: Deployment starts but ends with an error in the SSE log stream.
Solutions:
SSH user lacks Docker permissions — The SSH user must be in the
dockergroup:bashsudo usermod -aG docker <username>Compose file missing — Verify the Docker Compose file exists at the expected path on the remote host.
Health check timeout — If the deployment waits for a health check that never passes, increase the timeout or verify the container's health endpoint is reachable.
Image pull failure — Check that the Docker registry credentials are correct and the image tag exists.
WARNING
After adding a user to the docker group, the SSH session must be restarted for the change to take effect. You may need to disconnect and reconnect the environment in Ops Atlas.
License Not Activating
Symptom: License key is entered but the edition does not change.
Solutions:
Edition mismatch — Ensure
LICENSE_EDITIONin your.envmatches the key you purchased (e.g.,PROorENTERPRISE).Network connectivity — If license validation requires an external check, ensure the backend can reach the validation server.
Expired license — Check the
validUntildate on your license. Expired keys are rejected.Restart after
.envchange — If you changedLICENSE_EDITIONin the.envfile, restart the backend:bashdocker compose restart backend
Container Discovery Missing Services
Symptom: Some containers on a Docker host are not shown in the dashboard.
Solutions:
Excluded patterns — Check the discovery configuration for exclude patterns. Containers matching these patterns are intentionally hidden.
Container not running — By default, only running containers are discovered. Stopped containers may be filtered out depending on settings.
Refresh needed — Force a refresh via the API:
bashcurl -X POST http://localhost:8090/api/refresh \ -H "Authorization: Bearer <token>"
Redis / Eureka Connection Errors
Symptom: Redis or Eureka pages show connection refused or timeout errors.
Solutions:
Per-environment configuration — Redis and Eureka connections are configured per environment. Verify the host and port in the environment settings.
Network reachability — Ensure the backend container can reach the Redis/Eureka host. From inside the backend container:
bashdocker compose exec backend curl telnet://redis-host:6379Authentication — If Redis requires a password, ensure it is set in the environment configuration.
High Memory Usage
Symptom: Backend container consumes excessive memory or is OOM-killed.
Solutions:
Adjust JVM heap — Set
JAVA_OPTSin your.envto control memory allocation:JAVA_OPTS=-Xms256m -Xmx512mMonitoring refresh interval — Frequent polling of container stats across many environments can consume significant memory. Increase the refresh interval in Settings.
Container limits — Set memory limits in
docker-compose.yml:yamlservices: backend: deploy: resources: limits: memory: 768M
TIP
For environments with more than 50 containers, consider increasing the JVM heap to -Xmx1g and setting a Docker memory limit of at least 1.5 GB.