我在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,如下所示:
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。
答案 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