Hi there,
I'm trying to get discourse
and mattermost
to run behind traefik
.
It all runs on digitalocean droplet using Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-66-generic x86_64)
as OS. Discourse
was running fine as a standalone container. I can reach the traefik
dashboard easily now but that's it.
I'm not even getting whoami
running as described in Quick Start despite the fact that the dashboard says all alright but the healthcheck tells a different story
root@Ubuntu18:~# docker exec -it traefik traefik healthcheck --ping
INFO[0000] Configuration loaded from flags.
Bad healthcheck status: 404 Not Found
I found a discussion on this result in Strange healthcheck behaviour but I still don't get it.
When I do curl -v -H Host:whoami.docker.localhost http://127.0.0.1
I get 404. When I repalce the loopback address by the local IP of the container I get the response as shown in Quick Start.
curl -v -H Host:whoami.docker.localhost http://127.0.0.1
* Rebuilt URL to: http://127.0.0.1/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host:whoami.docker.localhost
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< X-Content-Type-Options: nosniff
< Date: Mon, 30 Dec 2019 13:15:19 GMT
< Content-Length: 19
<
404 page not found
* Connection #0 to host 127.0.0.1 left intact
access.log
172.20.0.1 - - [31/Dec/2019:13:34:26 +0000] "GET / HTTP/1.1" 404 19 "-" "-" 1 - - 0ms
172.20.0.1 - - [31/Dec/2019:13:34:46 +0000] "GET / HTTP/1.1" 404 19 "-" "-" 2 - - 0ms
172.20.0.1 - - [31/Dec/2019:13:34:49 +0000] "GET / HTTP/1.1" 404 19 "-" "-" 3 - - 0ms
172.20.0.1 - - [31/Dec/2019:13:35:34 +0000] "GET / HTTP/1.1" 404 19 "-" "-" 4 - - 0ms
172.20.0.1 - - [31/Dec/2019:13:35:35 +0000] "GET / HTTP/1.1" 404 19 "-" "-" 5 - - 0ms
172.20.0.1 - - [31/Dec/2019:13:35:36 +0000] "GET / HTTP/1.1" 404 19 "-" "-" 6 - - 0ms
curl -v -H Host:whoami.docker.localhost http://172.20.0.3
* Rebuilt URL to: http://172.20.0.3/
* Trying 172.20.0.3...
* TCP_NODELAY set
* Connected to 172.20.0.3 (172.20.0.3) port 80 (#0)
> GET / HTTP/1.1
> Host:whoami.docker.localhost
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Mon, 30 Dec 2019 11:22:42 GMT
< Content-Length: 168
< Content-Type: text/plain; charset=utf-8
<
Hostname: e3c222e6993f
IP: 127.0.0.1
IP: 172.20.0.3
RemoteAddr: 172.20.0.1:58072
GET / HTTP/1.1
Host: whoami.docker.localhost
User-Agent: curl/7.58.0
Accept: */*
I have been sitting on this problem for days now without any progress. I have to say that I spend some days getting docker's logs output to pretty-print, which will be shared here too, hopefully, this makes the life of others easier.
So may you support me a bit in regard to the output of the networking tools as I cannot make head or tail of all of them.
logs, config-files content and traefik dashbaord
-
basics
CLI: traefik version
root@Ubuntu18:/var/traefik# docker exec -t traefik traefik version Version: 2.0.7 Codename: montdor Go version: go1.13.5 Built: 2019-12-09T17:51:21Z OS/Arch: linux/amd64
docker-compose.yml
version: "3.7" services: traefik-reverse-proxy: # The official v2.0 Traefik docker image image: traefik:v2.0 container_name: "traefik" command: # --providers.docker : tells Traefik to listen to docker # --log.level=DEBUG : set debug level # --api : Enable api/dashboard. (Default: false) / (set the docker endpoint to speak to docker's API) # --api.dashboard : Activate dashboard. (Default: true) # --api.insecure=true Enables the web UI / Traefik will listen on port 8080 by default for API request. / Activate API directly on the entryPoint named traefik. (Default: false) --> port '8080'v= entryPoint 'traefik', overrides --api # --api.debug=true Enable additional endpoints for debugging and profiling. (Default: false) --api=true --api.dashboard --api.insecure=true --api.debug=true --providers.docker --log.level=DEBUG --accesslog=true --accesslog.filepath=/var/traefik/access.log #--entryPoints.myweb.address=:80 #--providers.docker.endpoint=unix:///var/run/docker.sock ports: # The HTTP port - "80:80" # The Web UI (enabled by --api.insecure=true) - "8080:8080" volumes: # So that Traefik can listen to the Docker events - /var/run/docker.sock:/var/run/docker.sock - ./log:/var/traefik networks: - traefik #Tiny Go webserver that prints os information and HTTP request to output whoami: image: "containous/whoami" container_name: "whoami" labels: #- "traefik.enable=true" #- "traefik.docker.network=bridge_proxy_traefikv2" - "traefik.http.routers.whoami.rule=Host(`whoami.fairbnb.community`)" #- "traefik.http.routers.whoami.entrypoints=myweb" #- "traefik.http.services.whoami.loadBalancer.server.port=80" networks: - traefik networks: traefik: external: name: bridge_proxy_traefikv2
API/rawdata - formatted
{ "routers": { "traefik-reverse-proxy-traefik@docker": { "service":"traefik-reverse-proxy-traefik","rule":"Host(`traefik-reverse-proxy-traefik`)", "status":"enabled","using":["http","traefik"] } ,"whoami@docker": { "service":"whoami-traefik","rule":"Host(`whoami.fairbnb.community`)", "status":"enabled","using":["http","traefik"] } }, "services": { "traefik-reverse-proxy-traefik@docker": { "loadBalancer": { "servers":[ { "url":"http://172.20.0.4:80" }], "passHostHeader":true }, "status":"enabled","usedBy":["traefik-reverse-proxy-traefik@docker"], "serverStatus": { "http://172.20.0.4:80":"UP" } }, "whoami-traefik@docker": { "loadBalancer": { "servers":[ { "url":"http://172.20.0.3:80" }], "passHostHeader":true }, "status":"enabled","usedBy":["whoami@docker"], "serverStatus": { "http://172.20.0.3:80":"UP" } } } }
docker lables - image versions of traefik and whoami etc.
root@Ubuntu18:/var/traefik# docker ps --no-trunc --format "table {{.Names}}::{{.Command}}::{{.Ports}}::{{.Networks}}::{{.Labels}}" | awk -F:: -f docker_ps-pretty-print.awk NAMES | COMMAND | PORTS | NETWORKS | LABELS whoami | /whoami | 80/tcp | bridge_proxy_traefikv2 | com.docker.compose.config-hash=04d3ea1924e36df000380782ee3ef53bc6ba4ea3f4fd64399471c7c289a116d0 | | | | com.docker.compose.container-number=1 | | | | com.docker.compose.oneoff=False | | | | com.docker.compose.project=traefik | | | | com.docker.compose.service=whoami | | | | com.docker.compose.version=1.24.1 | | | | traefik.http.routers.whoami.rule=Host(`whoami.fairbnb.community`) traefik | --accesslog.filepath=/var/traefik/access.log | 0.0.0.0:80->80/tcp | bridge_proxy_traefikv2 | com.docker.compose.config-hash=c8103750c5e975be3a182063d6ecc48a3f7590d5fa3ed5730c784dc2eff23eeb | --accesslog=true | 0.0.0.0:8080->8080/tcp | | com.docker.compose.container-number=1 | --api.dashboard | | | com.docker.compose.oneoff=False | --api.debug=true | | | com.docker.compose.project=traefik | --api.insecure=true | | | com.docker.compose.service=traefik-reverse-proxy | --api=true | | | com.docker.compose.version=1.24.1 | --log.level=DEBUG | | | org.opencontainers.image.description=A modern reverse-proxy | --providers.docker | | | org.opencontainers.image.documentation=https://docs.traefik.io | /entrypoint.sh | | | org.opencontainers.image.title=Traefik | | | | org.opencontainers.image.url=https://traefik.io | | | | org.opencontainers.image.vendor=Containous | | | | org.opencontainers.image.version=v2.0.7
-
log entries
log etnries of the traefik docker | docker logs --details --tail all traefik
root@Ubuntu18:/var/traefik# docker logs --details --tail all traefik | awk '{print $1 "\t" $2 "\t" substr($0, length($1) + length($2) + 4 ) }' time="2019-12-31T17:23:49Z" level=info msg="Configuration loaded from flags." time="2019-12-31T17:23:49Z" level=info msg="Traefik version 2.0.7 built on 2019-12-09T17:51:21Z" time="2019-12-31T17:23:49Z" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"http\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}},\"traefik\":{\"address\":\":8080\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}}},\"providers\":{\"providersThrottleDuration\":2000000000,\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"exposedByDefault\":true,\"swarmModeRefreshSeconds\":15000000000}},\"api\":{\"insecure\":true,\"dashboard\":true,\"debug\":true},\"log\":{\"level\":\"DEBUG\",\"format\":\"common\"},\"accessLog\":{\"filePath\":\"/var/traefik/access.log\",\"format\":\"common\",\"filters\":{},\"fields\":{\"defaultMode\":\"keep\",\"headers\":{\"defaultMode\":\"drop\"}}}}" time="2019-12-31T17:23:49Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/v2.0/contributing/data-collection/\n" time="2019-12-31T17:23:49Z" level=debug msg="No default certificate, generating one" time="2019-12-31T17:23:49Z" level=info msg="Starting provider aggregator.ProviderAggregator {}" time="2019-12-31T17:23:49Z" level=debug msg="Start TCP Server" entryPointName=http time="2019-12-31T17:23:49Z" level=debug msg="Start TCP Server" entryPointName=traefik time="2019-12-31T17:23:49Z" level=info msg="Starting provider *docker.Provider {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"exposedByDefault\":true,\"swarmModeRefreshSeconds\":15000000000}" time="2019-12-31T17:23:49Z" level=debug msg="Provider connection established with docker 19.03.5 (API 1.40)" providerName=docker time="2019-12-31T17:23:49Z" level=error msg="port is missing" providerName=docker container=discourse-main-90c80be9cb355d83097c34c033bb39c8dd1614cb3673746a8ad626464099b03a time="2019-12-31T17:23:49Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"traefik-reverse-proxy-traefik\":{\"service\":\"traefik-reverse-proxy-traefik\",\"rule\":\"Host(`traefik-reverse-proxy-traefik`)\"},\"whoami\":{\"service\":\"whoami-traefik\",\"rule\":\"Host(`whoami.fairbnb.community`)\"}},\"services\":{\"traefik-reverse-proxy-traefik\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://172.20.0.3:80\"}],\"passHostHeader\":true}},\"whoami-traefik\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://172.20.0.4:80\"}],\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=docker time="2019-12-31T17:23:49Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http traefik]" routerName=traefik-reverse-proxy-traefik@docker time="2019-12-31T17:23:49Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http traefik]" routerName=whoami@docker time="2019-12-31T17:23:49Z" level=debug msg="Creating middleware" middlewareName=pipelining middlewareType=Pipelining routerName=traefik-reverse-proxy-traefik@docker entryPointName=http serviceName=traefik-reverse-proxy-traefik time="2019-12-31T17:23:49Z" level=debug msg="Creating load-balancer" entryPointName=http serviceName=traefik-reverse-proxy-traefik routerName=traefik-reverse-proxy-traefik@docker time="2019-12-31T17:23:49Z" level=debug msg="Creating server 0 http://172.20.0.3:80" serverName=0 routerName=traefik-reverse-proxy-traefik@docker entryPointName=http serviceName=traefik-reverse-proxy-traefik time="2019-12-31T17:23:49Z" level=debug msg="Added outgoing tracing middleware traefik-reverse-proxy-traefik" middlewareName=tracing middlewareType=TracingForwarder entryPointName=http routerName=traefik-reverse-proxy-traefik@docker time="2019-12-31T17:23:49Z" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=http routerName=whoami@docker serviceName=whoami-traefik middlewareName=pipelining time="2019-12-31T17:23:49Z" level=debug msg="Creating load-balancer" serviceName=whoami-traefik entryPointName=http routerName=whoami@docker time="2019-12-31T17:23:49Z" level=debug msg="Creating server 0 http://172.20.0.4:80" serviceName=whoami-traefik entryPointName=http routerName=whoami@docker serverName=0 time="2019-12-31T17:23:49Z" level=debug msg="Added outgoing tracing middleware whoami-traefik" entryPointName=http middlewareName=tracing middlewareType=TracingForwarder routerName=whoami@docker time="2019-12-31T17:23:49Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=traefik-internal-recovery middlewareType=Recovery time="2019-12-31T17:23:49Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery time="2019-12-31T17:23:49Z" level=debug msg="No default certificate, generating one"
log entries of the whoami | docker logs --details --tail all whoami
root@Ubuntu18:/var/traefik# docker logs --details --tail all whoami Starting up on port 80
-
Dashboard