Skip to content

Instantly share code, notes, and snippets.

@x-yuri
Last active November 11, 2020 22:35
Show Gist options
  • Save x-yuri/c2275cb95d602bc4f907ca1927709f53 to your computer and use it in GitHub Desktop.
Save x-yuri/c2275cb95d602bc4f907ca1927709f53 to your computer and use it in GitHub Desktop.

Starting traefik

Standalone containers

For simplicity's sake no separate network is created (the default bridge network is used, although it's inferior to user-defined ones).

Starting traefik:

$ docker run --rm -itv /var/run/docker.sock:/var/run/docker.sock \
    -p 8001:80 -p 8002:8080 \
    traefik:1.7-alpine \
        --logLevel=DEBUG \
        --accessLog \
        --docker \
        --api

-it is not neccessary, but with it traefik can use colors (ANSI sequences).

-p 8001:80 publishes the proxy to port 8001.

--logLevel=DEBUG sets log level of the traefik log. --accessLog enables the access log (another log).

--docker enables the docker provider.

--api enables api (api + dashboard). -p 8002:8080 publishes api to port 8002. The dashboard will be available at http://localhost:8002.

INFO[2020-05-15T16:37:19Z] Traefik version v1.7.24 built on 2020-03-25_04:34:11PM 

Configuration used:

DEBU[2020-05-15T16:37:19Z] Global configuration loaded {
    "AccessLog":{"format":"common"},
    "TraefikLog":null,
    "LogLevel":"DEBUG",
    "EntryPoints":{
        "http":{
            "Address":":80",
            ...
        },
        "traefik":{
            "Address":":8080",
            ...
        }
    },
    "DefaultEntryPoints":["http"],
    "Docker":{
        "Endpoint":"unix:///var/run/docker.sock",
        "ExposedByDefault":true,
        "SwarmMode":false,
        ...
    },
    "API":{
        "EntryPoint":"traefik",
        "Dashboard":true,
        ...
    },
    ...
}
INFO[2020-05-15T16:37:19Z] 
Stats collection is disabled.
Help us improve Traefik by turning this feature on :)
More details on: https://docs.traefik.io/v1.7/basics/#collected-data 

Preparing and starting the proxy and api servers:

INFO[2020-05-15T16:37:19Z] Preparing server traefik &{Address::8080 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc0008284c0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s 
INFO[2020-05-15T16:37:19Z] Preparing server http &{Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc0008284a0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s 
INFO[2020-05-15T16:37:19Z] Starting server on :80                       
INFO[2020-05-15T16:37:19Z] Starting server on :8080                     
INFO[2020-05-15T16:37:19Z] Starting provider configuration.ProviderAggregator {} 

Starting the docker provider:

INFO[2020-05-15T16:37:19Z] Starting provider *docker.Provider {
  "Endpoint":"unix:///var/run/docker.sock",
  "ExposedByDefault":true,
  "SwarmMode":false,
  ...
}
DEBU[2020-05-15T16:37:19Z] Provider connection established with docker 19.03.8-ce (API 1.40) 

Found container traefik, but ignoring:

DEBU[2020-05-15T16:37:19Z] originLabelsmap[
  org.opencontainers.image.description:A modern reverse-proxy
  org.opencontainers.image.documentation:https://docs.traefik.io
  org.opencontainers.image.title:Traefik
  org.opencontainers.image.url:https://traefik.io
  org.opencontainers.image.vendor:Containous
  org.opencontainers.image.version:v1.7.24
] 
DEBU[2020-05-15T16:37:19Z] allLabelsmap[:map[]]                         
DEBU[2020-05-15T16:37:19Z] Filtering container with empty frontend rule /adoring_hofstadter  

docker provider summary:

DEBU[2020-05-15T16:37:19Z] Configuration received from provider docker: {} 
INFO[2020-05-15T16:37:19Z] Server configuration reloaded on :80         
INFO[2020-05-15T16:37:19Z] Server configuration reloaded on :8080       

Starting another container:

$ docker run --rm -it -l traefik.frontend.rule=Host:example.com containous/whoami

It will be available at http://example.com:8001.

traefik notices the change:

DEBU[2020-05-15T17:26:55Z] Provider event received {
  Status:start
  ID:8c1de4ef24d11b27609f5cd1fa612e3977bb66bca6017d7d96f876364492ef71
  From:containous/whoami
  Type:container
  Action:start
  Actor:{
    ID:8c1de4ef24d11b27609f5cd1fa612e3977bb66bca6017d7d96f876364492ef71
    Attributes:map[
      image:containous/whoami
      traefik.frontend.rule:Host:example.com
      ...
    ]
  }
  ...
} 

Found containers (traefik, whoami):

DEBU[2020-05-15T17:26:55Z] originLabelsmap[
  org.opencontainers.image.description:AWmodern reverse-proxy
  org.opencontainers.image.documentation:https://docs.traefik.io
  org.opencontainers.image.title:Traefik
  org.opencontainers.image.url:https://traefik.io
  org.opencontainers.image.vendor:Containous
  org.opencontainers.image.version:v1.7.24
] 
DEBU[2020-05-15T17:26:55Z] allLabelsmap[:map[]]                         
DEBU[2020-05-15T17:26:55Z] originLabelsmap[traefik.frontend.rule:Host:example.com] 
DEBU[2020-05-15T17:26:55Z] allLabelsmap[:map[traefik.frontend.rule:Host:example.com]] 

Ignoring the traefik container:

DEBU[2020-05-15T17:26:55Z] Filtering container with empty frontend rule /stoic_swartz  
DEBU[2020-05-15T17:26:55Z] originLabelsmap[traefik.frontend.rule:Host:example.com] 
DEBU[2020-05-15T17:26:55Z] allLabelsmap[:map[traefik.frontend.rule:Host:example.com]] 
DEBU[2020-05-15T17:26:55Z] Backend backend-sad-einstein: no load-balancer defined, fallback to 'wrr' method 

docker provider summary:

DEBU[2020-05-15T17:26:55Z] Configuration received from provider docker: {
  "backends":{
    "backend-sad-einstein":{
      "servers":{
        "server-sad-einstein-6a97af237a8c4b33d3b3252f98e273c3":{
          "url":"http://172.17.0.3:80",
          "weight":1
        }
      },
      ...
    }
  },
  "frontends":{
    "frontend-Host-example-com-0":{
      "entryPoints":["http"],
      "backend":"backend-sad-einstein",
      "routes":{
        "route-frontend-Host-example-com-0":{
          "rule":"Host:example.com"
        }
      },
      ...
    }
  }
} 

Making the container available:

DEBU[2020-05-15T17:26:55Z] Wiring frontend frontend-Host-example-com-0 to entryPoint http 
DEBU[2020-05-15T17:26:55Z] Creating backend backend-sad-einstein        
DEBU[2020-05-15T17:26:55Z] Creating load-balancer wrr                   
DEBU[2020-05-15T17:26:55Z] Creating server server-sad-einstein-6a97af237a8c4b33d3b3252f98e273c3 at http://172.17.0.3:80 with weight 1 
DEBU[2020-05-15T17:26:55Z] Creating route route-frontend-Host-example-com-0 Host:example.com 
INFO[2020-05-15T17:26:55Z] Server configuration reloaded on :80         
INFO[2020-05-15T17:26:55Z] Server configuration reloaded on :8080       

docker-compose

docker-compose.yml:

version: '3'

services:
    traefik:
        image: traefik:1.7
        command:
            --logLevel=DEBUG
            --accessLog
            --docker
            --docker.exposedByDefault=false
            --api
        ports:
            - 8001:80
            - 8002:8080
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock

    whoami:
        image: containous/whoami
        labels:
            traefik.enable: true
            traefik.frontend.rule: Host:example.com

Compared to the standalone containers case, containers don't need to have frontend rules to be wired. As such, exposedByDefault is set to false, or else traefik would wire itself, and try to proxy requests for itself (unsuccessfully). To be wired a container must have the traefik.enable=true label (as whoami does).

time="2020-05-15T18:59:36Z" level=info msg="Traefik version v1.7.24 built on 2020-03-25_04:34:11PM"

time="2020-05-15T18:59:36Z" level=debug msg="Global configuration loaded {
  "AccessLog":{"format":"common"},
  "TraefikLog":null,
  "LogLevel":"DEBUG",
  "EntryPoints":{
    "http":{
      "Address":":80",
      ...
    },
    "traefik":{
      "Address":":8080",
      ...
    }
  },
  "DefaultEntryPoints":["http"],
  "Docker":{
    "Endpoint":"unix:///var/run/docker.sock",
    "ExposedByDefault":false,
    "SwarmMode":false,
    ...
  },
  "API":{
    "EntryPoint":"traefik",
    "Dashboard":true,
    ...
  },
  ...
}"

time="2020-05-15T18:59:36Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/v1.7/basics/#collected-data\n"

time="2020-05-15T18:59:36Z" level=info msg="Preparing server http &{Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil ForwardedHeaders:0xc0008e07e0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-05-15T18:59:36Z" level=info msg="Preparing server traefik &{Address::8080 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc0008e0800} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-05-15T18:59:36Z" level=info msg="Starting server on :80"
time="2020-05-15T18:59:36Z" level=info msg="Starting server on :8080"

time="2020-05-15T18:59:36Z" level=info msg="Starting provider configuration.ProviderAggregator {}"

time="2020-05-15T18:59:36Z" level=info msg="Starting provider *docker.Provider {
  "Endpoint":"unix:///var/run/docker.sock",
  "ExposedByDefault":false,
  "SwarmMode":false,
  ...
}"
time="2020-05-15T18:59:36Z" level=debug msg="Provider connection established with docker 19.03.8-ce (API 1.40)"

time="2020-05-15T18:59:36Z" level=debug msg="originLabelsmap[
  com.docker.compose.config-hash:03832a5051f752bde40ab8404c895839a9a55a8b1d365ff297951feef77c2683
  com.docker.compose.container-number:1
  com.docker.compose.oneoff:False
  com.docker.compose.project:traefik-regex
  com.docker.compose.project.config_files:docker-compose.yml
  com.docker.compose.project.working_dir:/home/yuri/_/traefik-regex
  com.docker.compose.service:whoami
  com.docker.compose.version:1.25.5
  traefik.enable:true
  traefik.frontend.rule:Host:example.com
]"
time="2020-05-15T18:59:36Z" level=debug msg="allLabelsmap[:map[
  traefik.enable:true
  traefik.frontend.rule:Host:example.com
]]"
time="2020-05-15T18:59:36Z" level=debug msg="Filtering disabled container /traefik-regex_traefik_1"

time="2020-05-15T18:59:36Z" level=debug msg="originLabelsmap[
  com.docker.compose.config-hash:03832a5051f752bde40ab8404c895839a9a55a8b1d365ff297951feef77c2683
  com.docker.compose.container-number:1
  com.docker.compose.oneoff:False
  com.docker.compose.project:traefik-regex
  com.docker.compose.project.config_files:docker-compose.yml
  com.docker.compose.project.working_dir:/home/yuri/_/traefik-regex
  com.docker.compose.service:whoami
  com.docker.compose.version:1.25.5
  traefik.enable:true
  traefik.frontend.rule:Host:example.com
]"
time="2020-05-15T18:59:36Z" level=debug msg="allLabelsmap[:map[
  traefik.enable:true
  traefik.frontend.rule:Host:example.com
]]"
time="2020-05-15T18:59:36Z" level=debug msg="Backend backend-whoami-traefik-regex: no load-balancer defined, fallback to 'wrr' method"

time="2020-05-15T18:59:36Z" level=debug msg="Configuration received from provider docker: {
  "backends":{
    "backend-whoami-traefik-regex":{
      "servers":{
        "server-traefik-regex-whoami-1-ba08b9a6fd6a6a434ae85c28fea6f773":{
          "url":"http://172.23.0.3:80",
          "weight":1
        }
      },
      ...
    }
  },
  "frontends":{
    "frontend-Host-example-com-0":{
      "entryPoints":["http"],
      "backend":"backend-whoami-traefik-regex",
      "routes":{
        "route-frontend-Host-example-com-0":{
          "rule":"Host:example.com"
        }
      },
      ...
    }
  }
}"

time="2020-05-15T18:59:36Z" level=debug msg="Wiring frontend frontend-Host-example-com-0 to entryPoint http"
time="2020-05-15T18:59:36Z" level=debug msg="Creating backend backend-whoami-traefik-regex"
time="2020-05-15T18:59:36Z" level=debug msg="Creating load-balancer wrr"
time="2020-05-15T18:59:36Z" level=debug msg="Creating server server-traefik-regex-whoami-1-ba08b9a6fd6a6a434ae85c28fea6f773 at http://172.23.0.3:80 with weight 1"
time="2020-05-15T18:59:36Z" level=debug msg="Creating route route-frontend-Host-example-com-0 Host:example.com"

time="2020-05-15T18:59:36Z" level=info msg="Server configuration reloaded on :8080"
time="2020-05-15T18:59:36Z" level=info msg="Server configuration reloaded on :80"

Docker Swarm

docker-compose-traefik.yml:

version: "3.5"

services:
    traefik:
        image: traefik:1.7
        command:
            --logLevel=DEBUG
            --accessLog
            --docker
            --docker.swarmMode
            --api
        networks:
            - traefik
        ports:
            - 80:80
            - 8080:8080
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock

networks:
    traefik:
        name: traefik

docker-compose-whoami.yml:

version: "3"

networks:
    traefik:
        external: true

services:
    whoami:
        image: containous/whoami
        networks:
            - traefik
        deploy:
            labels:
                traefik.port: 80
                traefik.docker.network: traefik
                traefik.frontend.rule: Host:example.com
$ docker stack deploy -c docker-compose-traefik.yml traefik
time="2020-05-15T21:49:46Z" level=info msg="Traefik version v1.7.24 built on 2020-03-25_04:34:11PM"

time="2020-05-15T21:49:46Z" level=debug msg="Global configuration loaded {
    "AccessLog":{"format":"common"},
    "TraefikLog":null,
    "LogLevel":"DEBUG",
    "EntryPoints":{
      "http":{
        "Address":":80",
        ...
      },
      "traefik":{
        "Address":":8080",
        ...
      }
    },
    "Docker":{
      "Endpoint":"unix:///var/run/docker.sock",
      "ExposedByDefault":true,
      "SwarmMode":true,
      ...
    },
    "API":{
      "EntryPoint":"traefik",
      "Dashboard":true,
      ...
    },
}"

time="2020-05-15T21:49:46Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/v1.7/basics/#collected-data\n"

time="2020-05-15T21:49:46Z" level=info msg="Preparing server http &{Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc000913f00} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-05-15T21:49:46Z" level=info msg="Preparing server traefik &{Address::8080 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc000913f20} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-05-15T21:49:46Z" level=info msg="Starting server on :80"
time="2020-05-15T21:49:46Z" level=info msg="Starting server on :8080"

time="2020-05-15T21:49:46Z" level=info msg="Starting provider configuration.ProviderAggregator {}"

time="2020-05-15T21:49:46Z" level=info msg="Starting provider *docker.Provider {
    "Endpoint":"unix:///var/run/docker.sock",
    "ExposedByDefault":true,
    "SwarmMode":true,
    ...
  }"
time="2020-05-15T21:49:46Z" level=debug msg="Provider connection established with docker 19.03.8-ce (API 1.40)"

time="2020-05-15T21:49:46Z" level=debug msg="Configuration received from provider docker: {}"

time="2020-05-15T21:49:46Z" level=info msg="Server configuration reloaded on :80"
time="2020-05-15T21:49:46Z" level=info msg="Server configuration reloaded on :8080"

time="2020-05-15T21:50:01Z" level=debug msg="originLabelsmap[
  com.docker.stack.image:traefik:1.7
  com.docker.stack.namespace:traefik
]"
time="2020-05-15T21:50:01Z" level=debug msg="allLabelsmap[:map[]]"
time="2020-05-15T21:50:01Z" level=debug msg="Filtering container with empty frontend rule traefik_traefik.1 "
time="2020-05-15T21:50:01Z" level=debug msg="Configuration received from provider docker: {}"
time="2020-05-15T21:50:01Z" level=info msg="Skipping same configuration for provider docker"

time="2020-05-15T21:50:16Z" level=debug msg="originLabelsmap[
  com.docker.stack.image:traefik:1.7
  com.docker.stack.namespace:traefik
]"
time="2020-05-15T21:50:16Z" level=debug msg="allLabelsmap[:map[]]"
time="2020-05-15T21:50:16Z" level=debug msg="Filtering container with empty frontend rule traefik_traefik.1 "
time="2020-05-15T21:50:16Z" level=debug msg="Configuration received from provider docker: {}"
time="2020-05-15T21:50:16Z" level=info msg="Skipping same configuration for provider docker"
...
$ docker stack deploy -c docker-compose-whoami.yml whoami
time="2020-05-15T22:24:53Z" level=debug msg="originLabelsmap[
  com.docker.stack.image:traefik:1.7
  com.docker.stack.namespace:traefik
]"
time="2020-05-15T22:24:53Z" level=debug msg="allLabelsmap[:map[]]"
time="2020-05-15T22:24:53Z" level=debug msg="Filtering container with empty frontend rule traefik_traefik.1 "

time="2020-05-15T22:24:53Z" level=debug msg="originLabelsmap[
  com.docker.stack.image:containous/whoami
  com.docker.stack.namespace:whoami
  traefik.docker.network:traefik
  traefik.frontend.rule:Host:example.com
  traefik.port:80
]"
time="2020-05-15T22:24:53Z" level=debug msg="allLabelsmap[:map[
  traefik.docker.network:traefik
  traefik.frontend.rule:Host:example.com
  traefik.port:80
]]"

time="2020-05-15T22:24:53Z" level=debug msg="originLabelsmap[
  com.docker.stack.image:containous/whoami
  com.docker.stack.namespace:whoami
  traefik.docker.network:traefik
  traefik.frontend.rule:Host:example.com
  traefik.port:80
]"
time="2020-05-15T22:24:53Z" level=debug msg="allLabelsmap[:map[
  traefik.docker.network:traefik
  traefik.frontend.rule:Host:example.com
  traefik.port:80
]]"
time="2020-05-15T22:24:53Z" level=debug msg="Backend backend-whoami-whoami: no load-balancer defined, fallback to 'wrr' method"

time="2020-05-15T22:24:53Z" level=debug msg="Configuration received from provider docker: {
  "backends":{
    "backend-whoami-whoami":{
      "servers":{
        "server-whoami-whoami-1-89ae29f697cee0020c8a0f5b331e49a8":{
          "url":"http://10.0.6.6:80","weight":1
        }
      },
      ...
    }
  },
  "frontends":{
    "frontend-Host-example-com-0":{
      "entryPoints":["http"],
      "backend":"backend-whoami-whoami",
      "routes":{
        "route-frontend-Host-example-com-0":{
          "rule":"Host:example.com"
        }
      },
      ...
    }
  }
}"

time="2020-05-15T22:24:53Z" level=debug msg="Wiring frontend frontend-Host-example-com-0 to entryPoint http"
time="2020-05-15T22:24:53Z" level=debug msg="Creating backend backend-whoami-whoami"
time="2020-05-15T22:24:53Z" level=debug msg="Creating load-balancer wrr"
time="2020-05-15T22:24:53Z" level=debug msg="Creating server server-whoami-whoami-1-89ae29f697cee0020c8a0f5b331e49a8 at http://10.0.6.6:80 with weight 1"
time="2020-05-15T22:24:53Z" level=debug msg="Creating route route-frontend-Host-example-com-0 Host:example.com"

time="2020-05-15T22:24:53Z" level=info msg="Server configuration reloaded on :80"
time="2020-05-15T22:24:53Z" level=info msg="Server configuration reloaded on :8080"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment