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.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-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"