{"record":{"id":"2b82cd4b72964f13","repo":"Dokploy/dokploy","slug":"inngest-base-url-is-required-to-list-deployment-jo","errorCode":null,"errorMessage":"INNGEST_BASE_URL is required to list deployment jobs","messagePattern":"INNGEST_BASE_URL is required to list deployment jobs","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"apps/api/src/service.ts","lineNumber":217,"sourceCode":"\t\t\t\tfailedReason,\n\t\t\t\tstate,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn rows.sort((a, b) => (b.timestamp ?? 0) - (a.timestamp ?? 0));\n}\n\n/** Fetch deployment jobs for a server: events → runs → rows (correct model: runs = jobs) */\nexport const fetchDeploymentJobs = async (\n\tserverId: string,\n): Promise<DeploymentJobRow[]> => {\n\tif (!signingKey) {\n\t\tlogger.warn(\"INNGEST_SIGNING_KEY not set, returning empty jobs list\");\n\t\treturn [];\n\t}\n\tif (!baseUrl) {\n\t\tthrow new Error(\"INNGEST_BASE_URL is required to list deployment jobs\");\n\t}\n\n\tconst events = await fetchInngestEvents();\n\n\tconst requestedForServer = events.filter(\n\t\t(e) =>\n\t\t\te.name === \"deployment/requested\" &&\n\t\t\t(e.data as Record<string, unknown>)?.serverId === serverId,\n\t);\n\t// Limit to avoid too many run fetches\n\tconst toFetch = requestedForServer.slice(0, 50);\n\tconst runsByEventId = new Map<string, InngestRun[]>();\n\n\tawait Promise.all(\n\t\ttoFetch.map(async (ev) => {\n\t\t\tconst runs = await fetchInngestRunsForEvent(ev.id);\n\t\t\trunsByEventId.set(ev.id, runs);\n\t\t}),","sourceCodeStart":199,"sourceCodeEnd":235,"githubUrl":"https://github.com/Dokploy/dokploy/blob/546686ea3587f12ec5652217dedd9f7960fb6d15/apps/api/src/service.ts#L199-L235","documentation":"Thrown when docker.createNetwork fails while materializing a network row in Docker. The Docker API error (name conflict, invalid driver, bad IPAM config) is wrapped in a TRPCError with code BAD_REQUEST and the original message is forwarded. The cause chain preserves the underlying Docker error.","triggerScenarios":"Calling createDockerNetworkFromRow (directly or via created/recreateNetwork) when a Docker network with the same name already exists, the driver (e.g. macvlan/overlay) is unavailable on the host, or the IPAM config (subnet/gateway) is malformed or overlaps an existing network.","commonSituations":"Recreating a network after the DB row survived but the Docker network also survived; single-host docker installs that don't support overlay; subnet colliding with the default bridge or another compose network.","solutions":["Check whether a Docker network with the same name already exists (docker network ls) and remove it or reuse it before creating","Validate IPAM subnet/gateway values (CIDR format, no overlap with existing networks) before calling create","Verify the requested driver is installed and supported on the target Docker daemon (overlay needs Swarm, macvlan needs kernel support)","If the remote serverId points to another daemon, confirm connectivity to that daemon before creating"],"exampleFix":"// before\nawait createDockerNetworkFromRow(row);\n// after\nconst exists = await docker.listNetworks({ name: row.name });\nif (exists.length === 0) {\n  await createDockerNetworkFromRow(row);\n}","handlingStrategy":"validation","validationCode":"const docker = await getRemoteDocker(row.serverId ?? null);\nconst existing = await docker.listNetworks({ name: row.name });\nif (existing.length > 0) {\n  // reuse or remove before creating\n}","typeGuard":"const isDockerError = (e: unknown): e is { statusCode: number; message: string } =>\n  typeof e === 'object' && e !== null && 'statusCode' in e;","tryCatchPattern":"try { await createDockerNetworkFromRow(row); } catch (e) { if (e instanceof TRPCError) console.error(e.cause); throw e; }","preventionTips":["Check docker network ls for name conflicts before creating","Validate subnet CIDRs don't overlap existing networks","Ensure the requested driver exists on the target daemon"],"tags":["docker","network","trpc","ipam"],"backgroundTag":"docker-network-create-failed","analyzedSha":"546686ea3587f12ec5652217dedd9f7960fb6d15","analyzedAt":"2026-08-27T05:18:58.095Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}