2019-02-15 05:06:10 +01:00
Please note the following about this [traefik ](https://traefik.io/ ) example for Docker Pi-hole
2018-03-07 20:07:33 +01:00
2020-05-03 16:55:49 +02:00
- Still requires standard Pi-hole setup steps, make sure you've gone through the [README ](https://github.com/pi-hole/docker-pi-hole/blob/master/README.md ) and understand how to setup Pi-hole without traefik first
2018-03-07 20:07:33 +01:00
- Update these things before using:
- set instances of `homedomain.lan` below to your home domain (typically set in your router)
2019-02-15 05:06:10 +01:00
- set your Pi-hole ENV WEBPASSWORD if you don't want a random admin pass
2018-03-07 20:18:32 +01:00
- This works for me, Your mileage may vary!
2018-03-07 20:07:33 +01:00
- For support, do your best to figure out traefik issues on your own:
- by looking at logs and traefik web interface on port 8080
- also by searching the web and searching their forums/docker issues for similar question/problems
2019-02-15 05:06:10 +01:00
- Port 8053 is mapped directly to Pi-hole to serve as a back door without going through traefik
2018-03-07 20:07:33 +01:00
- There is some delay after starting your container before traefik forwards the HTTP traffic correctly, give it a minute
```
2020-05-03 16:55:49 +02:00
version: '3.8'
2018-03-07 20:07:33 +01:00
services:
traefik:
container_name: traefik
domainname: homedomain.lan
2019-02-15 05:06:10 +01:00
2020-05-11 14:40:35 +02:00
image: traefik:v2.2
2018-03-07 20:07:33 +01:00
restart: unless-stopped
2018-03-07 20:18:32 +01:00
# Note I opt to whitelist certain apps for exposure to traefik instead of auto discovery
2020-05-03 16:55:49 +02:00
# use `--providers.docker.exposedbydefault=true` if you don't want to have to do this
command:
- "--providers.docker=true"
2020-05-11 14:40:35 +02:00
- "--providers.docker.network=discovery"
2020-05-03 16:55:49 +02:00
- "--providers.docker.exposedbydefault=false"
- "--api.insecure=true"
- "--api.dashboard=true"
- "--entrypoints.http.address=:80"
- "--log.level=DEBUG"
2018-03-07 20:07:33 +01:00
ports:
- "80:80"
2018-07-11 06:22:39 +02:00
- "443:443"
2018-03-07 20:07:33 +01:00
- "8080:8080"
volumes:
2020-05-03 16:55:49 +02:00
- /var/run/docker.sock:/var/run/docker.sock:ro
2018-03-07 20:07:33 +01:00
networks:
- default
- discovery
dns:
- 192.168.1.50
- 192.168.1.1
pihole:
container_name: pihole
domainname: homedomain.lan
2019-02-15 05:06:10 +01:00
2018-08-04 19:06:51 +02:00
image: pihole/pihole:latest
2020-05-03 16:55:49 +02:00
networks:
2020-05-11 14:40:35 +02:00
- discovery
2018-03-07 20:07:33 +01:00
ports:
- '0.0.0.0:53:53/tcp'
- '0.0.0.0:53:53/udp'
2018-07-11 06:22:39 +02:00
- '0.0.0.0:67:67/udp'
2018-03-07 20:07:33 +01:00
- '0.0.0.0:8053:80/tcp'
volumes:
- ./etc-pihole/:/etc/pihole/
- ./etc-dnsmasqd/:/etc/dnsmasq.d/
2019-02-15 05:06:10 +01:00
# run `touch ./pihole.log` first unless you like errors
# - ./pihole.log:/var/log/pihole.log
2018-03-07 20:07:33 +01:00
environment:
ServerIP: 192.168.1.50
PROXY_LOCATION: pihole
VIRTUAL_HOST: pihole.homedomain.lan
VIRTUAL_PORT: 80
TZ: 'America/Chicago'
2018-07-11 06:22:39 +02:00
# WEBPASSWORD:
2018-03-07 20:07:33 +01:00
restart: unless-stopped
labels:
2020-05-03 16:55:49 +02:00
# required when using --providers.docker.exposedbydefault=false
2018-03-07 20:07:33 +01:00
- "traefik.enable=true"
2020-05-11 14:40:35 +02:00
- "traefik.http.routers.pihole.rule=Host(`pihole.homedomain.lan`)"
2020-05-03 16:55:49 +02:00
- "traefik.http.routers.pihole.entrypoints=http"
2020-05-11 14:40:35 +02:00
- "traefik.docker.network=discovery"
2020-05-03 16:55:49 +02:00
- "traefik.http.services.pihole.loadbalancer.server.port=80"
2018-03-07 20:07:33 +01:00
networks:
# Discovery is manually created to avoid forcing any order of docker-compose stack creation (`docker network create discovery`)
# allows other compose files to be seen by proxy
# Not required if you aren't using multiple docker-compose files...
discovery:
external: true
```
After running `docker-compose up -d` you should see this if you look at logs on traefik `docker-compose logs -f traefik`
```
2020-05-11 14:40:35 +02:00
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Provider event received {Status:health_status: healthy ID:3befdc0a97908de7a679109c8cf1d2a6bf8a78c9018faae697b7251f1ff38932 From:pihole/pihole:latest Type:container Action:health_status: healthy Actor:{ID:3befdc0a97908de7a679109c8cf1d2a6bf8a78c9018faae697b7251f1ff38932 Attributes:map[com.docker.compose.config-hash:b2785684a80ef0cc97b7c34697e239ad90ef68580f2cc286f183c95d966f6eae com.docker.compose.container-number:1 com.docker.compose.oneoff:False com.docker.compose.project:pi-hole com.docker.compose.project.config_files:docker-compose.yml com.docker.compose.project.working_dir:/opt/pi-hole com.docker.compose.service:pihole com.docker.compose.version:1.25.5 image:pihole/pihole:latest maintainer:adam@diginc.us name:pihole traefik.docker.network:discovery traefik.enable:true traefik.http.routers.pihole.entrypoints:http traefik.http.routers.pihole.rule:Host(`pihole.homedomain.lan`) traefik.http.services.pihole.loadbalancer.server.port:80 url:https://www.github.com/pi-hole/docker-pi-hole]} Scope:local Time:1589199915 TimeNano:1589199915511243989}" providerName=docker
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Filtering disabled container" providerName=docker container=traefik-pi-hole-c5847115be3d90c73a89824f80f1e6882bd8de60c50063f56be9d224192a14f4
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"pihole\":{\"entryPoints\":[\"http\"],\"service\":\"pihole\",\"rule\":\"Host(`pihole.homedomain.lan`)\"}},\"services\":{\"pihole\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://172.18.0.3:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=http routerName=pihole@docker serviceName=pihole middlewareName=pipelining
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating load-balancer" entryPointName=http routerName=pihole@docker serviceName=pihole
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating server 0 http://172.18.0.3:80" entryPointName=http serverName=0 routerName=pihole@docker serviceName=pihole
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Added outgoing tracing middleware pihole" entryPointName=http routerName=pihole@docker middlewareName=tracing middlewareType=TracingForwarder
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=traefik-internal-recovery middlewareType=Recovery
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" middlewareType=TracingForwarder entryPointName=traefik routerName=dashboard@internal middlewareName=tracing
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating middleware" middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex entryPointName=traefik routerName=dashboard@internal
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Setting up redirection from ^(http:\\/\\/[^:\\/]+(:\\d+)?)\\/$ to ${1}/dashboard/" middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex entryPointName=traefik routerName=dashboard@internal
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Adding tracing to middleware" routerName=dashboard@internal middlewareName=dashboard_redirect@internal entryPointName=traefik
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Added outgoing tracing middleware api@internal" entryPointName=traefik routerName=api@internal middlewareName=tracing middlewareType=TracingForwarder
traefik | time="2020-05-11T12:25:15Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery
traefik | time="2020-05-11T12:25:15Z" level=debug msg="No default certificate, generating one"
2018-03-07 20:07:33 +01:00
```
Also your port 8080 should list the Route/Rule for pihole and backend-pihole container.