繁体   English   中英

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

[英]How do I connect a Docker container running in boot2docker to a network service running on another host?

我在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] consumer:无法连接到amqp:// guest:** @ 127.0.0.1:5672//:[Errno 111]连接被拒绝。 在2.00秒内再次尝试......

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

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

我正在运行容器作为docker run -i -t标记名

我在运行容器时没有使用-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)。

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

  • docker容器的IP地址是172.17.0.33。

[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地址。

那么你可能不得不做一些关于路由的事情,但让我们一步一步。

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

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

可以设置一个大使容器,该容器具有--expose=80并使用诸如socat之类的东西将所有流量从该容器转发到您的主机(请参阅svendowideit / ambassador)。 然后你会--link该大使容器到当前的图像

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

您必须为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM