Trying to run Pi-hole on docker fails

Trying to run it via docker compose outputs

[+] Building 0.0s (0/0)                                                                                                                           
[+] Running 1/0
 ✘ Network pihole_default  Error                                                                                                             0.0s 
failed to create network pihole_default: Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-e102ea736d33 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

Here is my config:

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
      - "80:80/tcp"
    environment:
      TZ: 'Asia/Manila'
      #WEBPASSWORD: ''
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
    restart: unless-stopped

This doesn't seem like a Pi-hole issue.

That would suggest that something has tampered with iptable rules on your host system, removing or interfering with Docker's rule sets.

Docker should recreate them when restarted.
Use the command as appropriate to start the Docker service on your chosen platform, e.g.

sudo systemctl restart docker

That made Pi-hole run, but the web ui shows 403 Forbidden

Logs:

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  | 
  [✓] Installing latest logrotate script
pihole  |   [i] Creating empty /etc/pihole/setupVars.conf file.
pihole  |   [i] Assigning password defined by Environment Variable
pihole  |   [✓] New password set
pihole  |   [i] Added ENV to php:
pihole  |                     "TZ" => "Asia/Manila",
pihole  |                     "PIHOLE_DOCKER_TAG" => "",
pihole  |                     "PHP_ERROR_LOG" => "/var/log/lighttpd/error-pihole.log",
pihole  |                     "CORS_HOSTS" => "",
pihole  |                     "VIRTUAL_HOST" => "09658f89cad3",
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] Configuring default DNS servers: 8.8.8.8, 8.8.4.4
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  | s6-rc: info: service _postFTL successfully started
pihole  | s6-rc: info: service legacy-services: starting
pihole  |   Checking if custom gravity.db is set in /etc/pihole/pihole-FTL.conf
pihole  | s6-rc: info: service legacy-services successfully started
pihole  |   [i] Creating new gravity database
pihole  |   [i] Migrating content of /etc/pihole/adlists.list into new database
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
  [✓] Status: Retrieval successful
  [✓] Parsed 190102 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  | 
  [✓] Building tree
  [✓] Swapping databases
pihole  |   [✓] The old database remains available
pihole  |   [i] Number of gravity domains: 190102 (190102 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  |   [✓] FTL is listening on port 53
pihole  |      [✓] UDP (IPv4)
pihole  |      [✓] TCP (IPv4)
pihole  |      [✓] UDP (IPv6)
pihole  |      [✓] TCP (IPv6)
pihole  | 
pihole  |   [i] Pi-hole blocking will be enabled
pihole  |   [i] Enabling blocking
  [✓] Pi-hole Enabled
pihole  | 
pihole  |   Pi-hole version is v5.17.1 (Latest: v5.17.1)
pihole  |   AdminLTE version is v5.20.1 (Latest: v5.20.1)
pihole  |   FTL version is v5.23 (Latest: v5.23)
pihole  |   Container tag is: 2023.05.2
pihole  | 
pihole  | s6-rc: info: service legacy-services: stopping
pihole  | s6-rc: info: service legacy-services successfully stopped
pihole  | s6-rc: info: service _postFTL: stopping
pihole  | s6-rc: info: service _postFTL successfully stopped
pihole  | s6-rc: info: service lighttpd: stopping
pihole  | Stopping lighttpd
pihole  | s6-rc: info: service lighttpd successfully stopped
pihole  | s6-rc: info: service pihole-FTL: stopping
pihole  | Stopping pihole-FTL
pihole  | s6-rc: info: service pihole-FTL successfully stopped
pihole  | s6-rc: info: service _startup: stopping
pihole  | s6-rc: info: service _startup successfully stopped
pihole  | s6-rc: info: service _uid-gid-changer: stopping
pihole  | s6-rc: info: service _uid-gid-changer successfully stopped
pihole  | s6-rc: info: service cron: stopping
pihole  | Stopping cron
pihole  | s6-rc: info: service cron successfully stopped
pihole  | s6-rc: info: service legacy-cont-init: stopping
pihole  | s6-rc: info: service legacy-cont-init successfully stopped
pihole  | s6-rc: info: service fix-attrs: stopping
pihole  | s6-rc: info: service fix-attrs successfully stopped
pihole  | s6-rc: info: service s6rc-oneshot-runner: stopping
pihole  | s6-rc: info: service s6rc-oneshot-runner successfully stopped
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" => "Asia/Manila",
pihole  |                     "PIHOLE_DOCKER_TAG" => "",
pihole  |                     "PHP_ERROR_LOG" => "/var/log/lighttpd/error-pihole.log",
pihole  |                     "CORS_HOSTS" => "",
pihole  |                     "VIRTUAL_HOST" => "09658f89cad3",
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  | s6-rc: info: service _postFTL successfully started
pihole  | s6-rc: info: service legacy-services: starting
pihole  |   Checking if custom gravity.db is set in /etc/pihole/pihole-FTL.conf
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
  [✓] Status: Retrieval successful
  [✓] Parsed 190102 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 stayed unchanged
pihole  | 
  [✓] Building tree
  [✓] Swapping databases
pihole  |   [✓] The old database remains available
pihole  |   [i] Number of gravity domains: 190102 (190102 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  |   [✓] FTL is listening on port 53
pihole  |      [✓] UDP (IPv4)
pihole  |      [✓] TCP (IPv4)
pihole  |      [✓] UDP (IPv6)
pihole  |      [✓] TCP (IPv6)
pihole  | 
pihole  |   [✓] Pi-hole blocking is enabled
pihole  | 
pihole  |   Pi-hole version is v5.17.1 (Latest: v5.17.1)
pihole  |   AdminLTE version is v5.20.1 (Latest: v5.20.1)
pihole  |   FTL version is v5.23 (Latest: v5.23)
pihole  |   Container tag is: 2023.05.2
pihole  |

Which URL are you using to access the web interface?
Did you add /admin?

You can access using the hostname: http://pi.hole/admin or
You can use the host IP: http://<machine_IP>/admin