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 - "9090:80/tcp" environment: TZ: 'Asia/Dhaka' WEBPASSWORD: '469205' # 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 Note: To solve DNS port 53 error ------------------------------------------------------------------- Port 53 is being used at your host machine, that's why you can not bind 53 to host. To find what is using port 53 you can do: sudo lsof -i -P -n | grep LISTEN I'm a 99.9% sure that systemd-resolved is what is listening to port 53. To solve that you need to disable it. You can do that with these 2 commands: systemctl disable systemd-resolved.service systemctl stop systemd-resolved Now you have port 53 open, but no dns configured for your host. To fix that, you need to edit '/etc/resolv.conf' and add the dns address. This is an example with a common dns address: nameserver 8.8.8.8 If you have another nameserver in that file, I would comment it to prevent issues. Once pihole docker container gets running, you can change the dns server of your host to localhost, as you are binding port 53 to the host machine. Change again '/etc/resolv.conf' like this nameserver 127.0.0.1 Hope this helped! ( I recommend you to learn docker-compose, it is easier to use than 'docker run' IMO)