From 2fbb22f65866ac97b47e4d47d8f855fee8c98e2a Mon Sep 17 00:00:00 2001 From: p4u1 Date: Fri, 26 Dec 2025 11:05:12 +0100 Subject: [PATCH] fix(loader): Allows multiple protocols on one port --- cli/compose/loader/merge.go | 6 +++++- cli/compose/loader/merge_test.go | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/cli/compose/loader/merge.go b/cli/compose/loader/merge.go index a321fd18c..002b4c776 100644 --- a/cli/compose/loader/merge.go +++ b/cli/compose/loader/merge.go @@ -116,7 +116,11 @@ func toServicePortConfigsMap(s any) (map[any]any, error) { } m := map[any]any{} for _, p := range ports { - m[p.Published] = p + protocol := "tcp" + if p.Protocol != "" { + protocol = p.Protocol + } + m[fmt.Sprintf("%d%s", p.Published, protocol)] = p } return m, nil } diff --git a/cli/compose/loader/merge_test.go b/cli/compose/loader/merge_test.go index 40445d6c4..fbe987310 100644 --- a/cli/compose/loader/merge_test.go +++ b/cli/compose/loader/merge_test.go @@ -848,6 +848,8 @@ func TestLoadMultipleConfigs(t *testing.T) { "ports": []any{ "8080:80", "9090:90", + "53:53/tcp", + "53:53/udp", }, "labels": []any{ "foo=bar", @@ -925,6 +927,18 @@ func TestLoadMultipleConfigs(t *testing.T) { }, }, Ports: []types.ServicePortConfig{ + { + Mode: "ingress", + Target: 53, + Published: 53, + Protocol: "tcp", + }, + { + Mode: "ingress", + Target: 53, + Published: 53, + Protocol: "udp", + }, { Target: 81, Published: 8080,