New install on Docker on Mac - Rate Limited

The issue I am facing:
Got rate limit message in pi-hole diagnosis logs. Don't think I have a DNS loop.

I'm In uncharted territory, setup Pi-hole on a Mac in Docker for the first time after having run it on a Pi for years. Trying to slim down the amount of hardware I have so I decided to run it on my always-on Mac Mini vs a Pi.

I never had the issue when I just ran it on a Pi.

Details about my system:
Topology is: Xfiniity Cable Modem > Firewalla Gold DNS set to Mac Mini's 192.168.2.10 IP > then splits off to my wifi APs and some wired clients (This Mac Mini being one of them).

I installed Docker and setup according to these instructions GitHub - dchakro/PiHoleOnMacOS: This is my workflow for installing and setiing up pihole inside a docker container on MacOS mojave and using it as a DNS server.

What I have changed since installing Pi-hole:
I just added 4 blocklists and a few whitelist items using teleport from the setup that was previously on my Pi

Logs:
https://tricorder.pi-hole.net/WIfOtG7S/

The IP that's get rate-limited is Docker's internal gateway:

*** [ DIAGNOSING ]: Pi-hole diagnosis messages
 count  last timestamp       type             message            blob1                 blob2
 -----  -------------------  ---------------  -----------------  --------------------  --------------------
 1      2024-11-13 07:36:57  RATE_LIMIT       172.17.0.1         1000                  60

In bridge network modes, Docker is isolating containers in a separate network.
In your case, that also means that Docker is NATting traffic that it's passing into the bridge network, making that gateway your Pi-hole's only client.

If you were running your Docker on Linux, you could consider switching to another network mode - but unfortunately, Docker Desktop for MacOS does not support host or macvlan network modes (and neither would Docker Desktop for Windows).

You could consider to lift Pi-hole's rate limit by passing FTLCONF_RATE_LIMIT into your Pi-hole container. If n would be the number of clients, I'd probably set it to (n ÷ 2 *1000), so e.g. FTLCONF_RATE_LIMIT=4000/60 for 8 clients.

However, as Docker would still NAT requests, you still won't be able to attribute DNS requests to individual clients in your Docker MacOS configuration, and thus cannot take advantage of Pi-hole's client specific filtering.
If you need that, you should consider to stick with your RPi.

Thanks for the info. I thought about maybe having a double NAT after posting this since I am not so familiar w/ Docker. Sucks very much that it goes this way running Docker on Mac/Windows since I'd like to slim down the # of devices I run.

I'm already unable to take advantage of client specific filtering because I am behind a Firewalla Gold. 172.17.0.1 has to be the Firewalla.

Is it?
Your debug log seems to suggest that 172.17.0.1 is your Docker's internal gateway, while your home network operates on 192.168.2.0/24(?) - at least, 192.168.2.10 is the address used for your Pi-hole container.

Yeah sorry I mistyped, I meant to type “has to be docker”, but I had just been talking about Firewalla and my brain did not do what I wanted.

I have about 80 devices on the network between home, IoT, work stuff. Is there a big downside if I were to change the rate limiting?

It seems like there’s no other work around if you’re gonna run docker on a Mac?

Lifting your Pi-hole's rate limit is inoffensive.

The big downside of Docker NATting traffic is that...

@readthebook I use Colima on macOS. Colima supports the host network mode.

But when I try to run the pi-hole in host mode I get this:

➜ docker compose up
[+] Running 3/0
 ✔ Volume "pi-hole_dnsmasq_data"  Created                                                                                                                                                                        0.0s
 ✔ Volume "pi-hole_pihole_data"   Created                                                                                                                                                                        0.0s
 ✔ Container pihole               Created                                                                                                                                                                        0.0s
Attaching to pihole
pihole  | s6-rc: info: service s6rc-oneshot-runner: starting
pihole  | s6-rc: info: service s6rc-oneshot-runner successfully started
pihole  | s6-rc: info: service fix-attrs: starting
pihole  | s6-rc: info: service fix-attrs successfully started
pihole  | s6-rc: info: service legacy-cont-init: starting
pihole  | s6-rc: info: service legacy-cont-init successfully started
pihole  | s6-rc: info: service cron: starting
pihole  | s6-rc: info: service cron successfully started
pihole  | s6-rc: info: service _uid-gid-changer: starting
pihole  | s6-rc: info: service _uid-gid-changer successfully started
pihole  | s6-rc: info: service _startup: starting
pihole  |   [i] Starting docker specific checks & setup for docker pihole/pihole
pihole  |   [i] Setting capabilities on pihole-FTL where possible
pihole  |   [i] Applying the following caps to pihole-FTL:
pihole  |         * CAP_CHOWN
pihole  |         * CAP_NET_BIND_SERVICE
pihole  |         * CAP_NET_RAW
pihole  |         * CAP_NET_ADMIN
pihole  |   [i] Ensuring basic configuration by re-running select functions from basic-install.sh
pihole  |
pihole  |   [i] Installing configs from /etc/.pihole...
pihole  |   [i] Existing dnsmasq.conf found... it is not a Pi-hole file, leaving alone!
  [✓] Installed /etc/dnsmasq.d/01-pihole.conf
  [✓] Installed /etc/dnsmasq.d/06-rfc6761.conf
pihole  |
pihole  |   [i] Installing latest logrotate script...
pihole  | 	[i] Existing logrotate file found. No changes made.
pihole  |   [i] Assigning password defined by Environment Variable
pihole  |   [✓] New password set
pihole  |   [i] Added ENV to php:
pihole  |                     "TZ" => "Europe/Berlin",
pihole  |                     "PIHOLE_DOCKER_TAG" => "",
pihole  |                     "PHP_ERROR_LOG" => "/var/log/lighttpd/error-pihole.log",
pihole  |                     "CORS_HOSTS" => "",
pihole  |                     "VIRTUAL_HOST" => "colima",
pihole  |   [i] Using IPv4 and IPv6
pihole  |
  [✓] Installing latest Cron script
pihole  |   [i] setup_blocklists now setting default blocklists up:
pihole  |   [i] TIP: Use a docker volume for /etc/pihole/adlists.list if you want to customize for first boot
pihole  |   [i] Blocklists (/etc/pihole/adlists.list) now set to:
pihole  | https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
pihole  |   [i] Existing DNS servers detected in setupVars.conf. Leaving them alone
pihole  |   [i] Applying pihole-FTL.conf setting LOCAL_IPV4=0.0.0.0
pihole  |   [i] FTL binding to default interface: eth0
pihole  |   [i] Enabling Query Logging
pihole  |   [i] Testing lighttpd config: Syntax OK
pihole  |   [i] All config checks passed, cleared for startup ...
pihole  |   [i] Docker start setup complete
pihole  |
pihole  |   [i] pihole-FTL (no-daemon) will be started as pihole
pihole  |
pihole  | s6-rc: info: service _startup successfully started
pihole  | s6-rc: info: service pihole-FTL: starting
pihole  | s6-rc: info: service pihole-FTL successfully started
pihole  | s6-rc: info: service lighttpd: starting
pihole  | s6-rc: info: service lighttpd successfully started
pihole  | s6-rc: info: service _postFTL: starting
pihole  |   Checking if custom gravity.db is set in /etc/pihole/pihole-FTL.conf
pihole  | s6-rc: info: service _postFTL successfully started
pihole  | s6-rc: info: service legacy-services: starting
pihole  | s6-rc: info: service legacy-services successfully started
pihole  |   [i] Neutrino emissions detected...
  [✓] Pulling blocklist source list into range
pihole  |
  [✓] Preparing new gravity database
  [✓] Creating new gravity databases
pihole  |   [i] Using libz compression
pihole  |
pihole  |   [i] Target: https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
pihole  |   [i] Status: Pending...Stopping pihole-FTL
pihole  | pihole-FTL: no process found
  [✓] Status: Retrieval successful
  [✓] Parsed 121629 exact domains and 0 ABP-style domains (ignored 1 non-domain entries)
pihole  |       Sample of non-domain entries:
pihole  |         - "0.0.0.0"
pihole  |
pihole  |   [i] List has been updated
pihole  |
  [✓] Building tree
  [✓] Swapping databases
pihole  |   [✓] The old database remains available
pihole  |   [i] Number of gravity domains: 121629 (121629 unique domains)
pihole  |   [i] Number of exact blacklisted domains: 0
pihole  |   [i] Number of regex blacklist filters: 0
pihole  |   [i] Number of exact whitelisted domains: 0
pihole  |   [i] Number of regex whitelist filters: 0
  [✓] Cleaning up stray matter
pihole  |
pihole  |   [✗] DNS service is NOT running
pihole  |
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  |   Pi-hole version is v5.18.3 (Latest: v5.18.3)
pihole  |   web version is v5.21 (Latest: v5.21)
pihole  |   FTL version is v5.25.2 (Latest: v5.25.2)
pihole  |   Container tag is: 2024.07.0
pihole  |
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
pihole  | Stopping pihole-FTL
pihole  | pihole-FTL: no process found
Gracefully stopping... (press Ctrl+C again to force)

Not sure what I'm missing.

EDIT: Port 53 is already In use on my system. But I can access the web interface via my Macs IP. So, you could use Colima on your Mac.

You need to disable the service using port 53 (or change its port to something else) to avoid conflicts with Pi-hole.

I know, it's the mDNSresponder that is listening on this port. My post was kind of in response to @readthebook

I myself don't intend to run Pi-hole on my Mac. I just wanted to test whether Pi-hole on Colima can be run in host mode.

But thank you for your reply. (^-^)/

You may want to check if your system's mDNS responder is configured correctly.
mDNS standards specify port 5353, port 53 is DNS.

Well, I’d say Apple needs to check this. :joy:

It runs on port 53 out of the box on macOS.