Skip to content

[BUG] panic: interface conversion: interface {} is map[string]interface {}, not []interface {} #12709

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
kj4tmp opened this issue Apr 4, 2025 · 1 comment · Fixed by compose-spec/compose-go#767
Labels

Comments

@kj4tmp
Copy link

kj4tmp commented Apr 4, 2025

Description

Panic on improper compose override.

Steps To Reproduce

Create file docker-compose.yml:

include:
  - path:
    - ./base.yml
    - ./base-compose-override.yml

Create file base.yml:

networks:
  foo-network:
    ipam:
      config:
        - subnet: 172.16.0.0/24
          gateway: 172.16.0.254
          aux_addresses:
            foo1: 172.16.0.1
            foo2: 172.16.0.2
            foo3: 172.16.0.3
            foo4: 172.16.0.4

Create file base-compose-override.yml:

networks:
  foo-network:
    ipam:
      config:
        aux_addresses:
          foo1: !reset null
          foo2: !reset null
          foo3: !reset null

Run docker compose config and observe panic:

$ docker compose config
panic: interface conversion: interface {} is map[string]interface {}, not []interface {}

goroutine 1 [running]:
github.com/compose-spec/compose-go/v2/override.mergeIPAMConfig({0x1e80be0?, 0xc00065af18?}, {0x1fcc2a0, 0xc0007535c0}, {0xc00005db60, 0x20})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:209 +0x6e8
github.com/compose-spec/compose-go/v2/override.mergeYaml({0x1e80be0, 0xc00065af18}, {0x1fcc2a0, 0xc0007535c0}, {0xc00005db60, 0x20})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:75 +0x114
github.com/compose-spec/compose-go/v2/override.mergeMappings(0xc0005d7ad0, 0x19?, {0xc00005db40, 0x19})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:111 +0x18a
github.com/compose-spec/compose-go/v2/override.mergeYaml({0x1fcc2a0, 0xc0005d7ad0}, {0x1fcc2a0, 0xc000753590}, {0xc00005db40, 0x19})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:91 +0x30a
github.com/compose-spec/compose-go/v2/override.mergeMappings(0xc0005d7aa0, 0x14?, {0xc000736d68, 0x14})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:111 +0x18a
github.com/compose-spec/compose-go/v2/override.mergeYaml({0x1fcc2a0, 0xc0005d7aa0}, {0x1fcc2a0, 0xc000753560}, {0xc000736d68, 0x14})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:91 +0x30a
github.com/compose-spec/compose-go/v2/override.mergeMappings(0xc0005d7a70, 0x8?, {0xc00076a008, 0x8})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:111 +0x18a
github.com/compose-spec/compose-go/v2/override.mergeYaml({0x1fcc2a0, 0xc0005d7a70}, {0x1fcc2a0, 0xc000753530}, {0xc00076a008, 0x8})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:91 +0x30a
github.com/compose-spec/compose-go/v2/override.mergeMappings(0xc0005d7530, 0x0?, {0x0, 0x0})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:111 +0x18a
github.com/compose-spec/compose-go/v2/override.mergeYaml({0x1fcc2a0, 0xc0005d7530}, {0x1fcc2a0, 0xc000753500}, {0x0, 0x0})
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:91 +0x30a
github.com/compose-spec/compose-go/v2/override.Merge(0xc0005d7530, 0xc000753500)
        github.com/compose-spec/compose-go/[email protected]/override/merge.go:30 +0x53
github.com/compose-spec/compose-go/v2/loader.loadYamlModel.func1({0x1fcc2a0?, 0xc0007533e0?}, {0xc0004d6220, 0x1, 0x1})
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:411 +0x3a5
github.com/compose-spec/compose-go/v2/loader.loadYamlModel({0x2727660, 0xc00037a140}, {{0x0, 0x0}, {0x26f6620, 0x1}, {0xc000290660, 0x2, 0x2}, 0xc0005d7500}, ...)
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:447 +0x918
github.com/compose-spec/compose-go/v2/loader.ApplyInclude({0x2727660, 0xc00037a140}, {{0x0, 0x0}, {0xc00012a6c0, 0x1f}, {0xc0005d60f0, 0x1, 0x1}, 0xc0002d7dd0}, ...)
        github.com/compose-spec/compose-go/[email protected]/loader/include.go:149 +0x888
github.com/compose-spec/compose-go/v2/loader.loadYamlModel.func1({0x1fcc2a0?, 0xc0005d6a50?}, {0xc0004d6a88, 0x1, 0x1})
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:405 +0x377
github.com/compose-spec/compose-go/v2/loader.loadYamlModel({0x2727660, 0xc00037a140}, {{0x0, 0x0}, {0xc00012a6c0, 0x1f}, {0xc0005d60f0, 0x1, 0x1}, 0xc0002d7dd0}, ...)
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:447 +0x918
github.com/compose-spec/compose-go/v2/loader.load({0x2727660, 0xc00037a140}, {{0x0, 0x0}, {0xc00012a6c0, 0x1f}, {0xc0005d60f0, 0x1, 0x1}, 0xc0002d7dd0}, ...)
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:507 +0x38b
github.com/compose-spec/compose-go/v2/loader.loadModelWithContext({0x2727660, 0xc00037a140}, 0xc000324640, 0xc0002d5d40)
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:336 +0x105
github.com/compose-spec/compose-go/v2/loader.LoadWithContext({0x2727660, 0xc00037a140}, {{0x0, 0x0}, {0xc00012a6c0, 0x1f}, {0xc0005d60f0, 0x1, 0x1}, 0xc0002d7dd0}, ...)
        github.com/compose-spec/compose-go/[email protected]/loader/loader.go:312 +0xd8
github.com/compose-spec/compose-go/v2/cli.(*ProjectOptions).LoadProject(0xc0002d5cb0, {0x2727660, 0xc00037a140})
        github.com/compose-spec/compose-go/[email protected]/cli/options.go:443 +0x128
github.com/docker/compose/v2/cmd/compose.(*ProjectOptions).ToProject(0xc0005660a0, {0x2727660, 0xc00037a140}, {0x273f9e0, 0xc00023f400}, {0x39c23a0, 0x0, 0x0}, {0xc0002d7d40, 0x6, ...})
        github.com/docker/compose/v2/cmd/compose/compose.go:282 +0x539
github.com/docker/compose/v2/cmd/compose.(*configOptions).ToProject(0xc0004d76c8, {0x2727660, 0xc00037a140}, {0x273f9e0, 0xc00023f400}, {0x39c23a0, 0x0, 0x0}, {0x0, 0x0, ...})
        github.com/docker/compose/v2/cmd/compose/config.go:61 +0x16a
github.com/docker/compose/v2/cmd/compose.runConfigInterpolate({0x2727660, 0xc00037a140}, {0x273f9e0, 0xc00023f400}, {0xc0005660a0, {0x238039c, 0x4}, {0x0, 0x0}, 0x0, ...}, ...)
        github.com/docker/compose/v2/cmd/compose/config.go:176 +0x72
github.com/docker/compose/v2/cmd/compose.runConfig({0x2727660?, 0xc00037a140?}, {0x273f9e0, 0xc00023f400}, {0xc0005660a0, {0x238039c, 0x4}, {0x0, 0x0}, 0x0, ...}, ...)
        github.com/docker/compose/v2/cmd/compose/config.go:154 +0xc5
github.com/docker/compose/v2/cmd/compose.configCommand.func2({0x2727660?, 0xc00037a140?}, {0x39c23a0?, 0xc0000061c0?, 0x1d4a05c?})
        github.com/docker/compose/v2/cmd/compose/config.go:122 +0xe5
github.com/docker/compose/v2/cmd/compose.configCommand.Adapt.func4({0x2727660?, 0xc00037a140?}, 0x2?, {0x39c23a0?, 0x270c440?, 0x15172c5?})
        github.com/docker/compose/v2/cmd/compose/compose.go:121 +0x30
github.com/docker/compose/v2/cmd/compose.configCommand.Adapt.AdaptCmd.func7(0xc00020ef08, {0x39c23a0, 0x0, 0x0})
        github.com/docker/compose/v2/cmd/compose/compose.go:100 +0x154
github.com/docker/cli/cli-plugins/plugin.RunPlugin.func1.1.2(0xc00020ef08, {0x39c23a0, 0x0, 0x0})
        github.com/docker/[email protected]+incompatible/cli-plugins/plugin/plugin.go:69 +0x6c
github.com/docker/compose/v2/cmd/cmdtrace.Setup.wrapRunE.func2(0xc00020ef08?, {0x39c23a0?, 0x0?, 0x0?})
        github.com/docker/compose/v2/cmd/cmdtrace/cmd_span.go:85 +0x63
github.com/spf13/cobra.(*Command).execute(0xc00020ef08, {0xc00041f2f0, 0x0, 0x0})
        github.com/spf13/[email protected]/command.go:983 +0xaca
github.com/spf13/cobra.(*Command).ExecuteC(0xc000018308)
        github.com/spf13/[email protected]/command.go:1115 +0x3ff
github.com/spf13/cobra.(*Command).Execute(...)
        github.com/spf13/[email protected]/command.go:1039
github.com/docker/cli/cli-plugins/plugin.RunPlugin(0xc00023f400, 0xc000448908, {{0x2380ee4, 0x5}, {0x238ae7a, 0xb}, {0x2701040, 0x1b}, {0x0, 0x0}, ...})
        github.com/docker/[email protected]+incompatible/cli-plugins/plugin/plugin.go:84 +0x145
github.com/docker/cli/cli-plugins/plugin.Run(0x24cf350, {{0x2380ee4, 0x5}, {0x238ae7a, 0xb}, {0x2701040, 0x1b}, {0x0, 0x0}, {0x0, ...}})
        github.com/docker/[email protected]+incompatible/cli-plugins/plugin/plugin.go:99 +0x165
main.pluginMain()
        github.com/docker/compose/v2/cmd/main.go:38 +0xa5
main.main()
        github.com/docker/compose/v2/cmd/main.go:98 +0x19c

Expected behavior: no panic, error about trying to apply override incorrectly.

Compose Version

Docker Compose version 2.27.1+ds1-0ubuntu1~24.04.1

Docker Environment


Anything else?

No response

@ndeloof
Copy link
Contributor

ndeloof commented Apr 8, 2025

Your base-compose-override.yml file is invalid. ipam.config must be an array. This also prevents use of !reset here to remove elements in the existing list. You'll have to fully override the config definition

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
2 participants