Code Monkey home page Code Monkey logo

docker-dns's Introduction

docker-dns

Run a dns proxy in docker with wildcard host support

This is intended to be used within (but not limited to) a local docker development environment, typically in combination with some type of reverse proxy that supports virtualhosts like nginx. In this configuration, docker-dns allows you to simplify local container access by automatically setting up easier doamins like hello.docker

Quickstart:

docker run -p 53:53/udp -d --restart always finboxio/docker-dns

Once this container is running, configure your system to route DNS queries through localhost and you're all set.

Configuration:

docker-dns can be configured through the use of a few environment variables:

  • -e PORT=${PORT:-53} sets the port the DNS server will listen on

  • -e EXTERNAL_DNS=${IP:-8.8.8.8} sets the DNS server to which queries that cannot be resolved locally are proxied

  • -e HOSTS_FILE=${FILE:-/etc/docker-dns/hosts} -v $FILE:$FILE sets the host file to read for resolving queries locally. This should look like a typical /etc/hosts file, but additionally supports wildcard entries. The default hosts file included in this image is shown below, but you are free to mount your own:

    127.0.0.1 		*.docker
    192.168.99.100 	*.rancher
    

Note:

The second entry is really only effective if you have a rancher host running in a virtual machine with the IP 192.168.99.100. I do some development against a local rancher cluster spun up via mac-ranch, so this is actually a reasonably useful default for me.

Using with a reverse proxy

jwilder/nginx-proxy makes this really easy:

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always jwilder/nginx-proxy

Note:

Your system may have a default web server already running on port 80. If that's the case you'll either need to disable it or choose a different port. If you're on mac and aren't using the default apache server you can disable it with

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Now, you can start up any container with VIRTUAL_HOST set to a docker domain and access it from the browser without having to expose/keep track of all the different ports you're using!

docker run -d -p 80 -e VIRTUAL_HOST=hello.docker -e VIRTUAL_PORT=80 tutum/hello-world && open http://hello.docker

#winning

Acknowlegements

DNS proxy code shamelessly copied from hubdotcom/marlon-tools. Thanks for the great work!

docker-dns's People

Contributors

bdentino avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

docker-dns's Issues

Project does not use hosts file specified

I have read through the code and I cannot see anywhere the domain information is loaded from the disk from the file given in the readme instructions.

any explanation for that? perhaps this is unfinished functionality?

what I did find was a series of hard coded domains in the code instead, I am going to try to get it to work from importing the file from the disk and see how far I can get

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.