Docker bridge to Vulcand
Go Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Havok is a bridge between Docker and Vulcand. It works by listening for Docker events and automatically creating hosts and upstreams in etcd which are then used by Vulcand to serve the app.

Using the -names option, you can restrict which containers have upstreams created for them thus only exposing the containers you want to Vulcand. Also, the endpoints are generated in etcd based upon the container name. This allows you to run Havok on multiple hosts all pointing to the same etcd cluster and have containers distributed amongst hosts. When there are no more endpoints available, Havok will remove the host from Vulcand.




Currently there are some assumtions:

  • Havok will only use the first exposed port (multiple ports to differing services would cause mayhem)
  • The hostname of the container will be used as the subdomain (see the -root-domain setting below)


You must have etcd, vulcand, and docker (obviously) to use Havok. Here are some quick instructions:

Start etcd:

docker run -d -p 4001:4001 -p 7001:7001 coreos/etcd

Start vulcand (replace the IP with your non-local machine IP (i.e. 192.168.x.x)):

docker run -d -p 80:80 -p 8182:8182 mailgun/vulcand /opt/vulcan/vulcand -apiInterface="" -interface="" -port 80 --etcd=

Start havok (replace the IP with your non-local machine IP (i.e. 192.168.x.x)):

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ehazlett/havok -etcd-machines "" -host-ip -root-domain local

Start havok with rate and connection limiting

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ehazlett/havok -etcd-machines "" -host-ip -root-domain local -rate-limit 10 -conn-limit 5

Testing: Create a host entry in /etc/hosts:    foo.local

Then run a test container:

docker run -P -h foo ehazlett/go-static

Then run curl foo.local -- you should see "hello from go-static"


  • -conn-limit: Connection limit (default: 0)
  • -conn-limit-var: Variable for connection limiting (default: client.ip)
  • -docker: TCP or Path to Docker (i.e. unix:///var/run/docker.sock)
  • -etcd-machines: Comma separated list of etcd hosts (i.e. "")
  • -host-ip: The non-local machine IP (i.e. or, etc.)
  • -names: Containers with names matching this regex will have upstreams created in etcd
  • -rate-limit: Specify rate limit as requests per second (default: 0)
  • -rate-limit-burst: Set burst rate limit (default: 1)
  • -rate-limit-var: Variable for rate limiting (default: client.ip)
  • -root-domain: Domain that will be used for the containers (default: local)


  • I develop in containers and sometimes I have to restart Havok to get it to see the Docker events. This does not happen when ran from the host.