{"record":{"id":"440654d55a7ff410","repo":"docker/compose","slug":"loading-otel-config-from-docker-context-metadata","errorCode":null,"errorMessage":"loading otel config from docker context metadata: %w","messagePattern":"loading otel config from docker context metadata: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/tracing/docker_context.go","lineNumber":42,"sourceCode":"\t\"github.com/docker/cli/cli/context/store\"\n\t\"go.opentelemetry.io/otel/exporters/otlp/otlptrace\"\n\t\"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/credentials/insecure\"\n\n\t\"github.com/docker/compose/v5/internal/memnet\"\n)\n\nconst otelConfigFieldName = \"otel\"\n\n// traceClientFromDockerContext creates a gRPC OTLP client based on metadata\n// from the active Docker CLI context.\nfunc traceClientFromDockerContext(dockerCli command.Cli, otelEnv envMap) (otlptrace.Client, error) {\n\t// attempt to extract an OTEL config from the Docker context to enable\n\t// automatic integration with Docker Desktop;\n\tcfg, err := ConfigFromDockerContext(dockerCli.ContextStore(), dockerCli.CurrentContext())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"loading otel config from docker context metadata: %w\", err)\n\t}\n\n\tif cfg.Endpoint == \"\" {\n\t\treturn nil, nil\n\t}\n\n\t// HACK: unfortunately _all_ public OTEL initialization functions\n\t// \timplicitly read from the OS env, so temporarily unset them all and\n\t// \trestore afterwards\n\tdefer func() {\n\t\tfor k, v := range otelEnv {\n\t\t\tif err := os.Setenv(k, v); err != nil {\n\t\t\t\tpanic(fmt.Errorf(\"restoring env for %q: %w\", k, err))\n\t\t\t}\n\t\t}\n\t}()\n\tfor k := range otelEnv {\n\t\tif err := os.Unsetenv(k); err != nil {","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/docker/compose/blob/ddc4b044b62e9f715212ea4143fa830fac76382f/internal/tracing/docker_context.go#L24-L60","documentation":"When initializing tracing, compose reads the active Docker CLI context's metadata to find an embedded OTLP config (Docker Desktop integration). If st.GetMetadata(name) fails — context not found, unreadable context store, corrupt metadata file — the client setup aborts with 'loading otel config from docker context metadata: %w'. Per InitProvider, this error is joined and returned, failing tracing init.","triggerScenarios":"InitTracing/InitProvider running while dockerCli.CurrentContext() names a context that does not exist in the context store, or ~/.docker/contexts/meta/<hash>/meta.json is corrupt/unreadable/deleted mid-run.","commonSituations":"DOCKER_HOST or DOCKER_CONTEXT pointing at a removed context; a partially deleted or hand-edited context store; DOCKER_CONFIG redirected to a directory without context metadata; Docker Desktop context entries damaged by an upgrade.","solutions":["List and prune contexts: docker context ls, docker context rm <broken>, docker context use <valid>","Recreate the default context: docker context create default --docker host=unix:///var/run/docker.sock (or just remove the stale DOCKER_CONTEXT env var)","Verify the store files parse: cat ~/.docker/contexts/meta/*/meta.json | jq . — repair or delete corrupt entries","If DOCKER_CONFIG is set, ensure it points at a directory containing a valid context store"],"exampleFix":"# before: stale context referenced\nexport DOCKER_CONTEXT=removed-ctx\n# after: use a real one / unset\nunset DOCKER_CONTEXT\ndocker context use default","handlingStrategy":"validation","validationCode":"// verify the context resolves before initializing tracing\nif _, err := dockerCli.ContextStore().GetMetadata(dockerCli.CurrentContext()); err != nil {\n    // fall back: skip context-based tracing or fix context first\n}","typeGuard":null,"tryCatchPattern":"// catch the wrap from InitTracing; on context-store errors, switch context (docker context use default) or tolerate degraded tracing and continue","preventionTips":["Run docker context ls after removing/renaming contexts","Keep DOCKER_CONTEXT/DOCKER_HOST pointing at existing contexts","Back up ~/.docker/contexts before hand edits"],"tags":["docker-context","otel","tracing","configuration","go"],"backgroundTag":null,"analyzedSha":"ddc4b044b62e9f715212ea4143fa830fac76382f","analyzedAt":"2026-08-15T13:31:42.319Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}