Your last post sent me in the right direction.
After many false attempts I found this thread write in shared volumes docker - Stack Overflow which was part way there.
The remaining step was to remove ACLs on the QNAP host directory, as they appear to also be propagated into the docker with the bind mount.
Success!! I now get the login screen and subsequent functions, inc donation button
Thanks very much for your help.
#!/bin/sh
# For installation on QNAP, assuming you do not use these ports for other services
# free up port 443 by Control Panel -> System -> System Administration -> HTTPS port number=<not_443>
# free up port 80 by Control Panel -> Applications -> Web Server -> Enable Web Server -> Port number=<not_80>
# stop redirect of <qnap_ip>:80 to <qnap_ip>:8080 by placing an empty or valid php file at /share/Web/index.php
# pi-hole data persist in current working directory
DOCKER_CONFIGS="$(pwd)"
DOCKER_BRIDGE=pihole-static-bridge
DOCKER_BRIDGE_NIC=eth1
DOCKER_BRIDGE_IP=192.168.1.202
DOCKER_HOST_IP=192.168.1.202
DOCKER_PASSWORD=tempblah
# Open permissions and remove ACL before the bind mount
chmod 777 ${DOCKER_CONFIGS}
setfacl -b ${DOCKER_CONFIGS}
# Create a Static IP
docker network create \
-d qnet \
--ipam-driver=qnet \
--ipam-opt=iface=${DOCKER_BRIDGE_NIC} \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
${DOCKER_BRIDGE}
# Create Container
# -e PH_VERBOSE=1 \
docker run -d \
-h PIHOLE \
-p 53:53/tcp \
-p 53:53/udp \
-p 80:80 \
-p 443:443 \
-e ServerIP=${DOCKER_HOST_IP} \
-e TZ=Australia/Melbourne \
-e IPv6=False \
-e DNS1=1.1.1.1 \
-e DNS2=1.0.0.1 \
-e WEBPASSWORD=${DOCKER_PASSWORD} \
--name piholecon \
--net ${DOCKER_BRIDGE} \
--ip=${DOCKER_BRIDGE_IP} \
--restart=unless-stopped \
--cap-add=NET_ADMIN \
--dns=127.0.0.1 \
--dns=1.1.1.1 \
-v ${DOCKER_CONFIGS}/pihole/:/etc/pihole/:rw \
-v ${DOCKER_CONFIGS}/dnsmasq.d/:/etc/dnsmasq.d/:rw \
pihole/pihole:latest