diff --git a/provider/docker/config.go b/provider/docker/config.go index c96f1940b..e1fbae873 100644 --- a/provider/docker/config.go +++ b/provider/docker/config.go @@ -263,11 +263,16 @@ func isBackendLBSwarm(container dockerData) bool { } func getSegmentBackendName(container dockerData) string { - if value := label.GetStringValue(container.SegmentLabels, label.TraefikBackend, ""); len(value) > 0 { - return provider.Normalize(container.ServiceName + "-" + value) + serviceName := container.ServiceName + if values, err := label.GetStringMultipleStrict(container.Labels, labelDockerComposeProject, labelDockerComposeService); err == nil { + serviceName = provider.Normalize(values[labelDockerComposeService] + "_" + values[labelDockerComposeProject]) } - return provider.Normalize(container.ServiceName + "-" + getDefaultBackendName(container) + "-" + container.SegmentName) + if value := label.GetStringValue(container.SegmentLabels, label.TraefikBackend, ""); len(value) > 0 { + return provider.Normalize(serviceName + "-" + value) + } + + return provider.Normalize(serviceName + "-" + getDefaultBackendName(container) + "-" + container.SegmentName) } func getDefaultBackendName(container dockerData) string { diff --git a/provider/docker/config_container_docker_test.go b/provider/docker/config_container_docker_test.go index d8b4564bd..96f0b09fe 100644 --- a/provider/docker/config_container_docker_test.go +++ b/provider/docker/config_container_docker_test.go @@ -850,8 +850,9 @@ func TestDockerGetFrontendRule(t *testing.T) { func TestDockerGetBackendName(t *testing.T) { testCases := []struct { - container docker.ContainerJSON - expected string + container docker.ContainerJSON + segmentName string + expected string }{ { container: containerJSON(name("foo")), @@ -874,6 +875,15 @@ func TestDockerGetBackendName(t *testing.T) { })), expected: "bar-foo", }, + { + container: containerJSON(labels(map[string]string{ + "com.docker.compose.project": "foo", + "com.docker.compose.service": "bar", + "traefik.sauternes.backend": "titi", + })), + segmentName: "sauternes", + expected: "bar-foo-titi", + }, } for containerID, test := range testCases { @@ -883,7 +893,8 @@ func TestDockerGetBackendName(t *testing.T) { dData := parseContainer(test.container) segmentProperties := label.ExtractTraefikLabels(dData.Labels) - dData.SegmentLabels = segmentProperties[""] + dData.SegmentLabels = segmentProperties[test.segmentName] + dData.SegmentName = test.segmentName actual := getBackendName(dData) assert.Equal(t, test.expected, actual)