├── .gitignore ├── Dockerfile ├── README.md ├── docker-compose.yml ├── script_init.sh └── script_run.sh /.gitignore: -------------------------------------------------------------------------------- 1 | data/ 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | ENTRYPOINT ["/script_run.sh"] 3 | ADD script_*.sh / 4 | RUN chown root:root /script_*.sh && chmod 544 /script_*.sh && sync && /script_init.sh 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-bind-webmin 2 | Dockerized BIND DNS Server with Webmin for DNS Administration 3 | 4 | ## How to Run 5 | 6 | ``` 7 | docker-compose up 8 | ``` 9 | 10 | OR 11 | 12 | ``` 13 | docker run -d --restart=always --name bindwebmin \ 14 | -p 53:53 -p 53:53/udp -p 10000:10000 \ 15 | -v /home/bindwebmin:/data \ 16 | -e ROOT_PASSWORD=password \ 17 | -e WEBMIN_ENABLED=true \ 18 | fffaraz/bindwebmin 19 | ``` 20 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.5' 2 | 3 | services: 4 | bindwebmin: 5 | build: . 6 | restart: always 7 | volumes: 8 | - ./data:/data 9 | ports: 10 | - 53:53/tcp 11 | - 53:53/udp 12 | - 10000:10000 13 | environment: 14 | - ROOT_PASSWORD=password 15 | - WEBMIN_ENABLED=true 16 | -------------------------------------------------------------------------------- /script_init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euxo pipefail 3 | 4 | export DEBIAN_FRONTEND=noninteractive 5 | rm -rf /etc/apt/apt.conf.d/docker-gzip-indexes 6 | 7 | apt-get -yq update < /dev/null 8 | apt-get -yq upgrade < /dev/null 9 | apt-get -yq install apt-utils gnupg2 < /dev/null 10 | apt-get -yq install apt-transport-https ca-certificates net-tools unzip wget < /dev/null 11 | apt-get -yq install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python < /dev/null 12 | apt-get -yq install bind9 bind9utils bind9-host < /dev/null 13 | 14 | echo "deb https://download.webmin.com/download/repository sarge contrib" >> /etc/apt/sources.list 15 | wget -qO- http://www.webmin.com/jcameron-key.asc | apt-key add - 16 | 17 | apt-get -yq update < /dev/null 18 | apt-get -yq install webmin < /dev/null 19 | 20 | mkdir -m 0775 -p /var/run/named 21 | chown root:bind /var/run/named 22 | 23 | mkdir -m 0775 -p /var/cache/bind 24 | chown root:bind /var/cache/bind 25 | 26 | rm -rf /var/lib/apt/lists/* 27 | 28 | cat > /etc/bind/named.conf.options <<'EOL' 29 | options { 30 | directory "/var/cache/bind"; 31 | dnssec-validation auto; 32 | auth-nxdomain no; # conform to RFC1035 33 | listen-on-v6 { any; }; 34 | recursion no; 35 | allow-transfer { none; }; 36 | }; 37 | EOL 38 | -------------------------------------------------------------------------------- /script_run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euxo pipefail 3 | 4 | ROOT_PASSWORD=${ROOT_PASSWORD:-password} 5 | WEBMIN_ENABLED=${WEBMIN_ENABLED:-true} 6 | 7 | echo "root:$ROOT_PASSWORD" | chpasswd 8 | 9 | mkdir -p /data/bind 10 | [ ! -d /data/bind/etc ] && mv /etc/bind /data/bind/etc 11 | rm -rf /etc/bind 12 | ln -sf /data/bind/etc /etc/bind 13 | chmod -R 0775 /data/bind/etc 14 | 15 | mkdir -p /data/bind/lib 16 | rm -rf /var/lib/bind 17 | ln -sf /data/bind/lib /var/lib/bind 18 | 19 | chown -R bind:bind /data/bind 20 | 21 | mkdir -p /data/webmin 22 | chmod -R 0755 /data/webmin 23 | chown -R root:root /data/webmin 24 | [ ! -d /data/webmin/etc ] && mv /etc/webmin /data/webmin/etc 25 | rm -rf /etc/webmin 26 | ln -sf /data/webmin/etc /etc/webmin 27 | 28 | [ "$WEBMIN_ENABLED" == "true" ] && /etc/init.d/webmin start 29 | exec /usr/sbin/named -g -u bind 30 | --------------------------------------------------------------------------------