diegosouzapw/OmniRoute · error · Error

${message}${buildHint}

Error message

${message}${buildHint}

What it means

Aggregated docker-run failure in startSession: `docker run` for the VNC browser container exited non-zero. message is stderr (or the generic 'docker run failed'), and buildHint is appended when the image is omniroute-vnc-chromium:local and stderr matches pull-access/not-found patterns — pointing at the missing locally-built image rather than a registry problem.

Solutions

  1. If the hint is present: docker build -t omniroute-vnc-chromium:local docker/vnc-browser/chromium
  2. Otherwise read the embedded stderr — common causes are port exhaustion, image pull failure, or Docker daemon issues
  3. Confirm Docker is running and the user can run containers
  4. Retry startSession after fixing the underlying docker error
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/lib/vncSession/service.ts:232 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25). Data as JSON: /api/errors/636246cf7a7d97bb. Report an issue: GitHub.

Appendix: source

Thrown at src/lib/vncSession/service.ts:232

        `127.0.0.1::${VNC_CONFIG.containerVncPort}`,
        "-p",
        `127.0.0.1::${VNC_CONFIG.containerCdpPort}`,
        "-v",
        `${profileDir}:${VNC_CONFIG.containerProfileDir}`,
        "-e",
        `CHROME_CLI=${chromeCli}`,
        VNC_CONFIG.image,
      ],
      { timeoutMs: 120_000 }
    );
    if (result.code !== 0) {
      const message = result.err.trim() || "docker run failed";
      const buildHint =
        VNC_CONFIG.image === "omniroute-vnc-chromium:local" &&
        /pull access denied|unable to find image|not found/i.test(message)
          ? " Build it with: docker build -t omniroute-vnc-chromium:local docker/vnc-browser/chromium"
          : "";
      throw new Error(`${message}${buildHint}`);
    }

    state.vncPort = await publishedPort(containerName, VNC_CONFIG.containerVncPort);
    state.cdpPort = await publishedPort(containerName, VNC_CONFIG.containerCdpPort);
    await waitForCdpReady(state.cdpPort, VNC_CONFIG.browserReadyTimeoutMs);

    state.status = "running";
    scheduleIdleSweep();
    return state;
  } catch (error) {
    state.status = "error";
    state.error = error instanceof Error ? error.message : String(error);
    SESSIONS.delete(sessionId);
    await docker(["rm", "-f", containerName], { timeoutMs: 20_000 });
    cleanupProfile(state);
    throw new Error(`Failed to start browser login for connection ${connectionId}: ${state.error}`);
  }
}

View on GitHub (pinned to a179ffed5b)