{"record":{"id":"2b6f73c11aca36ae","repo":"juanfont/headscale","slug":"creating-tailscale-node-w-2b6f73","errorCode":null,"errorMessage":"creating tailscale node: %w","messagePattern":"creating tailscale node: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"integration/scenario.go","lineNumber":623,"sourceCode":"\tcert := headscale.GetCert()\n\thostname := headscale.GetHostname()\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\topts = append(\n\t\topts,\n\t\ttsic.WithCACert(cert),\n\t\ttsic.WithHeadscaleName(hostname),\n\t)\n\n\ttsClient, err := tsic.New(\n\t\ts.pool,\n\t\tversion,\n\t\topts...,\n\t)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"creating tailscale node: %w\",\n\t\t\terr,\n\t\t)\n\t}\n\n\terr = tsClient.WaitForNeedsLogin(integrationutil.PeerSyncTimeout())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"waiting for tailscaled (%s) to need login: %w\",\n\t\t\ttsClient.Hostname(),\n\t\t\terr,\n\t\t)\n\t}\n\n\treturn tsClient, nil\n}\n\n// CreateTailscaleNodesInUser creates and adds a new [TailscaleClient] to a","sourceCodeStart":605,"sourceCodeEnd":641,"githubUrl":"https://github.com/juanfont/headscale/blob/565fd254d06c4c7f9a8cad1714a43445c79ba420/integration/scenario.go#L605-L641","documentation":"Returned by Scenario.CreateTailscaleNode when tsic.New fails to create the tailscale client container for the requested version. This is the Docker-side creation of the node: image resolution/pull, container creation, or startup wrapping.","triggerScenarios":"Calling CreateTailscaleNode with a version whose container image is unavailable locally/registry, or when Docker cannot create/start the client container (resource limits, bad option).","commonSituations":"Using an unpulled tailscale image tag (e.g. a new version not present locally); typo'd version string; Docker daemon resource exhaustion after many nodes; custom tsic.Option with invalid values.","solutions":["Verify the version string matches an available image (`docker images | grep tailscale`) or pull it","Check the wrapped dockertest error for pull/create specifics","Reduce concurrent nodes or free Docker resources (disk, memory) if creation fails late in a run","Clean stale containers from crashed runs with `go run ./cmd/hi cleanup`"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Ensure the client image exists before the scenario needs it\nif err := pullTailscaleImage(version); err != nil { // docker pull tailscale/tailscale:<version>\n    t.Fatalf(\"client image %s unavailable: %v\", version, err)\n}","typeGuard":null,"tryCatchPattern":"node, err := scenario.CreateTailscaleNode(version, opts...)\nif err != nil {\n    t.Fatalf(\"creating tailscale node (%s): %v\", version, err)\n}","preventionTips":["Pre-pull or locally build tailscale client images for all versions used","Pin versions to images you control in CI","Clean stale containers (`hi cleanup`) when many nodes are created per run"],"tags":["tailscale","docker","container","integration-test"],"backgroundTag":null,"analyzedSha":"565fd254d06c4c7f9a8cad1714a43445c79ba420","analyzedAt":"2026-08-15T13:12:30.133Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}