From 2c1d5afde6887e5fe8bb37dc476fb03dd1425a98 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 34455d597c..e54e3b222f 100644 --- a/cli/compose/loader/merge.go +++ b/cli/compose/loader/merge.go @@ -117,7 +117,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 9d5a1dd6cd..a0a134cbc8 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,