Awesome
dockness
DNS for Docker machines, allows to access them with the following domain format : {machine}.docker
.
How it works
It spins up a simplistic DNS server, only listening for questions about A records.
Behind the scene it will use libmachine in order to resolve IP addresses.
Installation
Prebuilt binaries
Prebuilt binaries are available in the releases.
From source (requires Go)
go get github.com/bamarni/dockness
With Homebrew (Mac OS X)
brew tap mkw/homebrew-mkw
brew install dockness
Usage
dockness [options...]
Options:
-tld Top-level domain to use (defaults to "docker")
-ttl Time to Live for DNS records (defaults to 0)
-port Port to listen on (defaults to "53")
-debug Enable debugging (defaults to false)
Mac OSX
To develop on Mac you probably have a local VM, using VirtualBox for example. However this machine gets assigned a dynamic IP address.
You can be up and running in a few commands, first :
> echo -e "nameserver 127.0.0.1\nport 10053" | sudo tee /etc/resolver/docker
It tells your Mac that the resolver for .docker
TLD listens locally on port 10053. You can now run the resolver on this port :
> dockness -port 10053
2016/02/18 10:39:52 Listening on :10053...
Linux
Even though Linux users might not need a development VM, it can be useful for remote machines
(eg. ssh staging2.docker
, ...).
Here and unlike Mac OSX, there is no quick trick to make it work out of the box. Linux distributions come
with more advanced DNS management where manually tweaking resolv.conf
is usually not an option.
What should work in most cases is to use Dnsmasq, which provides a lightweight DNS server.
If you have it installed, you can run :
> dockness -port 10053
2016/02/18 10:40:43 Listening on :10053...
Then let Dnsmasq know about the resolver by running those commands :
> echo "server=/docker/127.0.0.1#10053" | sudo tee -a /etc/dnsmasq.conf
> sudo /etc/init.d/dnsmasq restart
Configure dockness as a service
As it's not very convenient to run the program manually in a terminal, you can instead set it as a service. Doing so, it will be running in the background automatically when booting your computer.
Mac OSX
You can create the appropriate service configuration file at ~/Library/LaunchAgents/local.dockness.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>local.dockness</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/dockness</string>
<string>-port</string>
<string>10053</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Finally, the service can be enabled :
launchctl load ~/Library/LaunchAgents/local.dockness.plist
Linux
Here again, it will depend on your Linux distribution. We'll take as example Systemd, which is nowadays the default init system in most distributions.
Create the following file at /etc/systemd/system/dockness.service
:
[Unit]
Description=Dockness
After=network.target
[Service]
ExecStart=/path/to/dockness -port 10053
[Install]
WantedBy=multi-user.target