How to access Consul DNS interface from host machine?
I am trying to create an environment for "microservices". Two key components, Docker and Consul , both run in a virtual machine (I used Vagrant to create this vm). When I ssh to vm, I can use the dig command line tool to access the DNS Console interface .
The thing is, I would like to be able to access the DNS interface from my host machine. I gave a static IP for the vm, but that didn't solve my problem. I also opened port 53 of my vm which also didn't resolve my problem.
This is my Vagrant script setup for my vm:
config.vm.define :app1 do |app1|
# Every Vagrant virtual environment requires a box to build off of.
app1.vm.box = "ubuntu/trusty64"
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
app1.vm.network :forwarded_port, guest: 3000, host: 3000
app1.vm.network :forwarded_port, guest: 53, host: 53
app1.vm.network :forwarded_port, guest: 8500, host: 8500
app1.vm.network :forwarded_port, guest: 15672, host: 15672
# Open 32 ports for Docker containers
for port in 32768..32800
app1.vm.network :forwarded_port, guest: port, host: port
end
# Create a private network, which allows host-only access to the machine
# using a specific IP.
app1.vm.network :private_network, ip: "200.0.0.1"
app1.vm.hostname = "server-1"
config.vm.provider "virtualbox" do |v|
v.memory = 1024
end
This is how I started Docker-container with consul :
sudo docker run --name consul -h $HOSTNAME -p 0.0.0.0:8300:8300 -p 0.0.0.0:8301:8301 -p 0.0.0.0:8301:8301/udp -p 0.0.0.0:8302:8302 -p 0.0.0.0:8302:8302/udp -p 0.0.0.0:8400:8400 -p 0.0.0.0:8500:8500 -p 0.0.0.0:53:53 -p 0.0.0.0:53:53/udp -d progrium/consul -advertise 200.0.0.1 -server -bootstrap
I tried using the following with dig from my host machine:
dig @200.0.0.1 someservice.service.consul SRV
This answered:
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> @200.0.0.1 someservice.service.consul ANY
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached
Is there a way that I can access the DNS interface consul from my host machine? Any help would be appreciated.
source to share
Here's what works for me:
$ docker pull gliderlabs/consul
$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --name node1 -h node1 gliderlabs/consul agent -server -bootstrap -client=0.0.0.0 -data-dir /tmp/consul
$ curl '127.0.0.1:8500/v1/catalog/nodes'
$ # returns [{"Node":"node1","Address":"172.17.0.34"}]
now dns is available in IP containers (172.17.0.34), I don't know why not with 0.0.0.0:
$ dig @172.17.0.34 -p 8600 node1.node.consul
$ # returns:
; <<>> DiG 9.9.5-3ubuntu0.3-Ubuntu <<>> @172.17.0.34 -p 8600 node1.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4812
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;node1.node.consul. IN A
;; ANSWER SECTION:
node1.node.consul. 0 IN A 172.17.0.34
;; Query time: 0 msec
;; SERVER: 172.17.0.34#8600(172.17.0.34)
;; WHEN: Wed Jul 22 08:23:51 CEST 2015
;; MSG SIZE rcvd: 68
source to share