Skip to content

ivanthescientist/docker-dns-addon

Repository files navigation

DockerDNS Addon

Go Report Card

What is this?

A minimalistic DNS server which provides default domains for deployed docker containers (provided they have networking enabled at all). The domain is inferred from container name, so if you have a container named mysql_local it will be available from domain mysql_local.docker provided you keep the default domain suffix (which is .docker., notice that trailing dot is part of protocol, browsers just remove it).

Requirements

  • go 1.10+ (only tested version)
  • docker (any version compatible with docker-compose 3.0)
  • docker-compose (any version supporting 3.0 configuration)
  • dep (any compatible version with go 1.10)

Building

  • make install-dependencies in the project root to install dependencies
  • make build to build the project binaries
  • make install to install built binaries as docker container
  • make rebuild - clean and then build the project
  • make reinstall - remove existing installation and then rebuild and install binaries as docker container

Installing from Dockerhub

For convenience there is a built image on dockerhub (beware that it is built locally on my machine for now and not on some trusted external CI): ivanthescientist/docker-dns-addon There is also a version of docker-compose.yaml using it deployments/docker-compose-dockerhub.yaml and several make targets:

  • make install-dockerhub - installs from dockerhub image
  • make uninstall-dockerhub - removes deployment from dockerhub
  • make reinstall-dockerhub - combined uninstall and install, just in case you want to scrap old version and install latest one

Setup

By default the DNS server is deployed on a static IP 172.100.0.2 using a docker network 172.100.0.0/16, this can be changed in docker-compose along with other configuration options. To start using the service after install it through make install simply add nameserver 172.100.0.2 to the end of your /etc/resolvconf/resolv.conf.d/tail file (create if necessary), then run sudo resolvconf -u to load updated config (it could take a moment or two after updating the config for the system to start using your newly added DNS server).

Accessing your services after setup

If you've installed the service correctly, your browser should be able to resolve IPs of your services. The domains will be constructed automatically from Container Name and provided Domain Suffix. For example if you Domain Suffix is .mydomain. and you have a container named mysql_local you can access it by domain mysql_local.mydomain from your browser or any tool in your system which uses default domain resolution services of your Linux OS.

If service is deployed on host network, the resolved IP will be 127.0.0.1 always, however if any other network configuration is used, first network IP will be used instead. By default docker deploys services into its own networks which typically look something like 172.x.x.x, e.g. 172.17.0.0/16, so the resulting IP of such container could be 172.17.0.2.

Config Options:

  • SERVER_HOST - IP address to bind server to, default is 0.0.0.0 for local deployment and 172.100.0.2 for docker deployment
  • SERVER_PORT - port to bind server to 53 is default for docker deployment and local deployment uses 5300 because ports below 1024 are only available to root
  • SERVER_PROTOCOL - transport protocol to serve DNS from, possible values are udp and tcp
  • DOMAIN_SUFFIX - dot enclosed top level domain (e.g. .com., .org. or .docker. in the default case), the trailing dot must be present.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published