Skip to content

hapylestat/dockerDNS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DockerDNS

LGPLv3

DockerDNS is a little dns server, which populate containers ip by their names thought dns. This solve problems with random generated ip's of the docker container and gives possibility to serve the application to the external world.

Requirements

  • python 3
  • docker-py (can be installed via pip)

How To Install

How To Use

DockerDNS could be used in various ways, just like any other dns server, except on;y one thing:

  • DockerDNS is only authoritative server, not recursive request
  • DockerDNS supports only A and PTR requests, while PRT used only to resolve his ip

DockerDNS could be perfectly used for reverse proxying docker container http port via nginx, for example:

  • we have some container called "example1" with available port 80
  • this container sitting on docker bridge with some permissions and we doesn't want to link this port to us real interfaces.

Forwarding will not help, coz after every container restart, container ip will be changes. And we have several options:

  • tune static ip for container via workarounds
  • use dockerDNS

All options will help, however second one not require any special tuning or magic with container, as result is more easy and can be configured more faster

Nginx configuration sample (reverse proxy)

server {
    listen       127.0.0.1:80;
    server_name  my.docker.server;

    #  where 127.0.0.3 is an address of dockerDNS
    resolver 127.0.0.3 ipv6=off;
    set $upstream "http://container-name:80";


    location / {
        proxy_pass          $upstream;
        proxy_http_version  1.1;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    Host $server_name:$server_port;
    }
}

Install as system service, systemd example:

  • create dockerdns.service file:
[Unit]
Description=docker dns service
After=syslog.target network-online.target
Requires=docker.service

[Service]
Type=simple
ExecStart=/usr/bin/python3 /path/to/server/docker_dns.py
ExecStop=/bin/kill -s QUIT $MAINPID
User=root
Group=root
PermissionsStartOnly=true

[Install]
WantedBy=multi-user.target
  • systemctl daemon-reload
  • systemctl enable dockerdns
  • systemctl start dockerdns

Integration with BIND

Zone configuration:

zone "docker.zone" IN {
  type forward;
  forwarders { 127.0.0.3; };
};

Reverse zone:

zone "10.168.192.in-addr.arpa" IN {
  type forward;
  forwarders { 127.0.0.3; };
};

Where docker.zone is your docker domain name, 192.168.10.0/24 docker address space. To forward reverse queries, BIND require "empty-zones-enable no;" in the named.conf settings

About

Docker DNS Server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages