Skip to content

Commit

Permalink
Added service name to dockerData struct.
Browse files Browse the repository at this point in the history
In Swarm mode with with Docker Swarm’s Load Balancer disabled (traefik.backend.loadbalancer.swarm=false)
service name will be the name of the docker service and name will be the container task name
(e.g. whoami0.1).  When generating backend and fronted rules, we will use service name instead of name if a
rule is not provided.

Initialize dockerData.ServiceName to dockerData.Name to support non-swarm mode.
  • Loading branch information
Mike Foley authored and emilevauge committed Feb 6, 2017
1 parent d2b47a5 commit e0a4c58
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
4 changes: 0 additions & 4 deletions docs/user-guide/swarm-mode.md
Expand Up @@ -120,16 +120,12 @@ docker-machine ssh manager "docker service create \
--name whoami0 \
--label traefik.port=80 \
--network traefik-net \
--label traefik.frontend.rule=Host:whoami0.traefik \
--label traefik.backend=whoami0 \
emilevauge/whoami"

docker-machine ssh manager "docker service create \
--name whoami1 \
--label traefik.port=80 \
--network traefik-net \
--label traefik.frontend.rule=Host:whoam1.traefik \
--label traefik.backend=whoami1 \
--label traefik.backend.loadbalancer.sticky=true \
emilevauge/whoami"
```
Expand Down
8 changes: 6 additions & 2 deletions provider/docker.go
Expand Up @@ -52,6 +52,7 @@ type Docker struct {

// dockerData holds the need data to the Docker provider
type dockerData struct {
ServiceName string
Name string
Labels map[string]string // List of labels set to container or service
NetworkSettings networkSettings
Expand Down Expand Up @@ -393,14 +394,14 @@ func (provider *Docker) getFrontendRule(container dockerData) string {
if label, err := getLabel(container, "traefik.frontend.rule"); err == nil {
return label
}
return "Host:" + provider.getSubDomain(container.Name) + "." + provider.Domain
return "Host:" + provider.getSubDomain(container.ServiceName) + "." + provider.Domain
}

func (provider *Docker) getBackend(container dockerData) string {
if label, err := getLabel(container, "traefik.backend"); err == nil {
return normalize(label)
}
return normalize(container.Name)
return normalize(container.ServiceName)
}

func (provider *Docker) getIPAddress(container dockerData) string {
Expand Down Expand Up @@ -559,6 +560,7 @@ func parseContainer(container dockertypes.ContainerJSON) dockerData {

if container.ContainerJSONBase != nil {
dockerData.Name = container.ContainerJSONBase.Name
dockerData.ServiceName = dockerData.Name //Default ServiceName to be the container's Name.

if container.ContainerJSONBase.HostConfig != nil {
dockerData.NetworkSettings.NetworkMode = container.ContainerJSONBase.HostConfig.NetworkMode
Expand Down Expand Up @@ -641,6 +643,7 @@ func (provider *Docker) listServices(ctx context.Context, dockerClient client.AP

func parseService(service swarmtypes.Service, networkMap map[string]*dockertypes.NetworkResource) dockerData {
dockerData := dockerData{
ServiceName: service.Spec.Annotations.Name,
Name: service.Spec.Annotations.Name,
Labels: service.Spec.Annotations.Labels,
NetworkSettings: networkSettings{},
Expand Down Expand Up @@ -691,6 +694,7 @@ func listTasks(ctx context.Context, dockerClient client.APIClient, serviceID str

func parseTasks(task swarmtypes.Task, serviceDockerData dockerData, networkMap map[string]*dockertypes.NetworkResource) dockerData {
dockerData := dockerData{
ServiceName: serviceDockerData.Name,
Name: serviceDockerData.Name + "." + strconv.Itoa(task.Slot),
Labels: serviceDockerData.Labels,
NetworkSettings: networkSettings{},
Expand Down

0 comments on commit e0a4c58

Please sign in to comment.