From 79cbe56a41d86dade2d3f63542987a93b24f64af Mon Sep 17 00:00:00 2001 From: tanyadegurechaff Date: Fri, 28 Apr 2017 17:05:54 +0900 Subject: [PATCH] Make port deterministic --- provider/docker/docker.go | 18 ++++++++++++++++-- provider/docker/docker_test.go | 15 +++++++-------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/provider/docker/docker.go b/provider/docker/docker.go index eb84e6b0d..c31ff7a04 100644 --- a/provider/docker/docker.go +++ b/provider/docker/docker.go @@ -594,9 +594,23 @@ func (p *Provider) getPort(container dockerData) string { if label, err := getLabel(container, "traefik.port"); err == nil { return label } - for key := range container.NetworkSettings.Ports { - return key.Port() + + // See iteration order in https://blog.golang.org/go-maps-in-action + var ports []nat.Port + for p := range container.NetworkSettings.Ports { + ports = append(ports, p) } + + less := func(i, j nat.Port) bool { + return i.Int() < j.Int() + } + nat.Sort(ports, less) + + if len(ports) > 0 { + min := ports[0] + return min.Port() + } + return "" } diff --git a/provider/docker/docker_test.go b/provider/docker/docker_test.go index b491d3740..30746b73b 100644 --- a/provider/docker/docker_test.go +++ b/provider/docker/docker_test.go @@ -227,14 +227,13 @@ func TestDockerGetPort(t *testing.T) { })), expected: "80", }, - // FIXME handle this better.. - //{ - // container: containerJSON(ports(nat.PortMap{ - // "80/tcp": {}, - // "443/tcp": {}, - // })), - // expected: "80", - //}, + { + container: containerJSON(ports(nat.PortMap{ + "80/tcp": {}, + "443/tcp": {}, + })), + expected: "80", + }, { container: containerJSON(labels(map[string]string{ "traefik.port": "8080",