{"record":{"id":"a44b03dc46d65b10","repo":"docker/cli","slug":"invalid-type-t-for-map-string-string","errorCode":null,"errorMessage":"invalid type %T for map[string]string","messagePattern":"invalid type %T for map\\[string\\]string","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/compose/loader/loader.go","lineNumber":692,"sourceCode":"\n\treturn obj, nil\n}\n\nfunc absPath(workingDir string, filePath string) string {\n\tif filepath.IsAbs(filePath) {\n\t\treturn filePath\n\t}\n\treturn filepath.Join(workingDir, filePath)\n}\n\nvar transformMapStringString TransformerFunc = func(data any) (any, error) {\n\tswitch value := data.(type) {\n\tcase map[string]any:\n\t\treturn toMapStringString(value, false), nil\n\tcase map[string]string:\n\t\treturn value, nil\n\tdefault:\n\t\treturn data, fmt.Errorf(\"invalid type %T for map[string]string\", value)\n\t}\n}\n\nvar transformExternal TransformerFunc = func(data any) (any, error) {\n\tswitch value := data.(type) {\n\tcase bool:\n\t\treturn map[string]any{\"external\": value}, nil\n\tcase map[string]any:\n\t\treturn map[string]any{\"external\": true, \"name\": value[\"name\"]}, nil\n\tdefault:\n\t\treturn data, fmt.Errorf(\"invalid type %T for external\", value)\n\t}\n}\n\nvar transformServicePort TransformerFunc = func(data any) (any, error) {\n\tswitch entries := data.(type) {\n\tcase []any:\n\t\t// We process the list instead of individual items here.","sourceCodeStart":674,"sourceCodeEnd":710,"githubUrl":"https://github.com/docker/cli/blob/4f84911bfe8811e9b028e4b1fee8e7510be79387/cli/compose/loader/loader.go#L674-L710","documentation":"Thrown by transformMapStringString, the transformer for fields like `sysctls`, `labels`, `extra_hosts` (mapping form). The value must be a `map[string]any` (YAML mapping) or `map[string]string`; any other shape (scalar, sequence) is rejected.","triggerScenarios":"A field expecting a mapping is given a scalar or a list — e.g. `sysctls: net.core.somaxconn` (a single string) or `labels: [a,b]`. The transformer is invoked per-key during Transform().","commonSituations":"Forgetting the value side of a mapping; using a list where a map is required; typo in indentation.","solutions":["Provide a mapping: `sysctls: { net.core.somaxconn: 1024 }`.","For list-style fields use the list form only where supported (some fields accept both via a different transformer)."],"exampleFix":"# before\nweb:\n  sysctls: net.core.somaxconn\n# after\nweb:\n  sysctls:\n    net.core.somaxconn: \"1024\"","handlingStrategy":"type-guard","validationCode":"func validateMapStringString(field string, v any) error {\n    switch v.(type) {\n    case map[string]any, map[string]string:\n        return nil\n    default:\n        return fmt.Errorf(\"%s must be a mapping, got %T\", field, v)\n    }\n}","typeGuard":"func isStringMapping(v any) bool {\n    switch v.(type) {\n    case map[string]any, map[string]string:\n        return true\n    }\n    return false\n}","tryCatchPattern":null,"preventionTips":["Remember `sysctls`/`labels`/`extra_hosts`(map form) need key:value pairs.","Use `docker compose config` to render and check.","Watch indentation: a mapping must be more indented than its parent key."],"tags":["compose","type-mismatch","mapping","labels","service"],"backgroundTag":null,"analyzedSha":"4f84911bfe8811e9b028e4b1fee8e7510be79387","analyzedAt":"2026-08-07T12:15:29.814Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}