如何将在boot2docker中运行的Docker容器连接到在另一台主机上运行的网络服务?

时间:2014-12-02 11:40:03

标签: networking rabbitmq virtualbox docker boot2docker

我在Windows 7(SP1)64位计算机上使用最新版本的boot2docker版本1.3.2,495c19a。

我的docker容器正在运行celery进程,该进程尝试连接到运行boot2docker的同一台机器上运行的rabbitMQ服务。

在docker容器中运行的Celery进程无法连接到RabbitMQ并报告以下内容:

  

[2014-12-02 10:28:41,141:ERROR / MainProcess]消费者:无法连接   到amqp:// guest:** @ 127.0.0.1:5672//:[Errno 111]连接被拒绝。   在2.00秒内再次尝试......

我有理由相信这是一个与网络相关的问题,与从容器,VirtualBox主机以及从主机到本地机器上运行的RabbitMQ服务的路由相关联;我不知道如何配置这个,我想知道是否有人可以建议我如何继续?

我尝试在端口转发中设置端口5672,但它不起作用(但我相信这是针对VM的传入流量,如boot2docker ssh)。

我正在运行容器作为docker run -i -t tagname

我在运行容器时没有使用-h指定主机。

如果这个问题显得相当无知或者答案显而易见,我很抱歉......我感谢任何帮助!


其他一些信息:

主机VM的路由表是安装期间配置的boot2docker,如下所示:

enter image description here

  • docker0 IP地址为172.17.42.1

  • eth0 IP地址为10.0.2.15

  • eth1 IP地址为192.168.59.103

  • eth0附加到VirtualBox VM网络配置中的NAT(适配器1)。

  • 适配器1具有ssh的端口转发设置;主机IP 127.0.0.1,主机端口2022,来宾端口22的默认设置。

  • eth1附加到仅限主机的适配器(适配器2)。

  • 两个适配器都设置为混杂模式(允许所有)。

  • 泊坞窗容器的IP地址为172.17.0.33。

3 个答案:

答案 0 :(得分:2)

  

[2014-12-02 10:28:41,141:ERROR / MainProcess] consumer:无法连接到amqp:// guest:** @ 127.0.0.1:5672//:[Errno 111]连接被拒绝。在2.00秒内再次尝试......

127.0.0.1是一个特殊的IP地址,意思是“我”,而容器里面的意思是“我的容器”,所以这就是它没有连接到外部主机的原因。因此,首先要做的是将尝试连接到Rabbit的IP地址更改为运行它的外部主机的IP地址。

然后你可能需要做一些关于路由的事情,但让我们一步一步。

答案 1 :(得分:2)

当您的RabbitMQ服务器在Windows主机上运行时,您需要告诉您的容器它应该与该IP通信 - 这可能是192.168.59.3

最重要的是,您的容器127.0.0.1只是该容器服务的环回设备 - 甚至不是boot2docker vm的端口。

可以设置一个拥有--expose=80的大使容器,并使用像socat这样的东西将所有流量从该容器转发到你的主机(参见svendowideit / ambassador)。然后你--link大使容器到你当前的图像

但就个人而言,我最初会避免这种情况,只需将您的容器化应用配置为与真实主机的IP进行通信

答案 2 :(得分:0)

您必须为boot2docker和docker分别明确指定端口重定向端口。

请试试这个:

c:\>boot2docker init
c:\>boot2docker up
c:\>boot2docker ssh -L 0.0.0.0:5672:localhost:5672
docker@boot2docker:~$ docker run -it -p 5672:5672 tagname
相关问题