DCDC provides a local DNS server for exposing docker containers on bridge networks.
This allows you to easily reference containers by name instead of exposing and binding IP addresses / ports on the localhost. Names are in the form of container-name.compose-project-name.dcdc
% dig mysql.my-project.dcdc
; <<>> DiG 9.18.18-0ubuntu0.22.04.2-Ubuntu <<>> mysql.my-project.dcdc
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59483
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;mysql.my-project.dcdc. IN A
;; ANSWER SECTION:
mysql.my-project.dcdc. 51 IN A 192.168.144.3
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Fri May 10 20:56:11 AEST 2024
;; MSG SIZE rcvd: 71
# TODO: upload to pypi
pip install docker-container-domain-conenctor
Edit /etc/systemd/resolved.conf
[Resolve]
DNS=127.0.0.1:9953#dcdc
dcdc
sudo systemctl restart systemd-resolved
dig some.container.dcdc
The main application is provided by the dcdc
command.
usage: dcdc [-h] [-v] [--log-dir PATH] [--version] [--host HOST] [--port PORT] [--tcp | --udp]
[--root-domain ROOT_DOMAIN]
dcdc (Docker Container Domain Connector) is a dns server that allows mapping docker containers to their currently running bridge ip address.
options:
-h, --help show this help message and exit
-v, --verbose Increase logging verbosity
--log-dir PATH Set where log files should be stored. Defaults to /var/tmp
--version show program's version number and exit
--host HOST Host (IP) to bind to. Use --ips to see available. Defaults to localhost.
--port PORT Port to bind to. Defaults to 9953.
--tcp Use TCPv4 socket for transport.
--udp Use UDPv4 socket for transport. (default)
--root-domain ROOT_DOMAIN
Root domain for queries (e.g. <query>.<root>). Does not have to be a TLD, can
be any level of domain. Defaults to ".dcdc".
This package also provies the dcdc-ips
utility command which will print available IP addresses.
This project is licenced under the MIT Licence - see LICENCE
.
A project by Nicholas Hairs - www.nicholashairs.com.