【发布时间】:2015-06-22 14:50:49
【问题描述】:
我一直在尝试为“微服务”创建一个环境。其中两个关键组件是 Docker 和 Consul,它们都在虚拟机上运行(我使用 Vagrant 创建了这个 vm)。当我 ssh 进入 vm 时,我可以使用 dig 命令行工具来访问 Consul 提供的 DNS 接口。
问题是:我希望能够从我的主机访问 DNS 接口。我已经为 vm 提供了一个静态 IP,但这并没有解决我的问题。我还打开了我的虚拟机的 53 端口,这也没有解决我的问题。
这是我为我的虚拟机设置的 Vagrant 脚本:
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
这就是我使用 Consul 启动 Docker-container 的方式:
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
我已经尝试在我的主机上将以下内容与 dig 一起使用:
dig @200.0.0.1 someservice.service.consul SRV
回复如下:
; <<>> 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
有什么方法可以让我的主机访问 Consul DNS 接口?任何帮助将不胜感激。
【问题讨论】:
-
app1.vm.network :forwarded_port, guest: 53, host: 53这行好像为您设置了转发,dig @127.0.0.1 ...有效吗? -
遗憾的是它没有。
dig @127.0.0.1 someservice.service.consul SRV给出与dig @200.0.0.1 someservice.service.consul SRV相同的结果 -
请发布
iptables -L -n -v的输出,以便我们查看 docker 到底做了什么。 -
progrium/consul 是旧版本,尝试使用 gliderlabs/consul,并添加“-client 0.0.0.0”作为额外参数。这样,我就可以使用容器的 IP 访问 DNS
标签: dns vagrant virtual-machine virtualbox consul