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.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.comCompared 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-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: traefikdocker-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"