当前位置: 首页 > 知识库问答 >
问题:

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

李烨烁
2023-03-14

我正在Windows 7(SP1)64位机器上使用最新版本的boot2docker版本1.3.2、495c19a。

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

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

[2014-12-02 10:28:41,141:错误/主进程] 使用者:无法连接到来宾 amqp://:**@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.215

    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。

  • 共有3个答案

    段干长恨
    2023-03-14

    您必须为 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
    
    安星汉
    2023-03-14

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

    最重要的是,容器的< code>127.0.0.1只是容器服务的回送设备,甚至不是boot2docker vm的端口。

    您可以设置一个具有< code> - expose=80的大使容器,并使用类似socat的东西将所有流量从该容器转发到您的主机(请参见svendoweit/ambassador)。然后将大使容器< code> - link到当前图像

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

    文华美
    2023-03-14

    [2014-12-02 10:28:41,141:错误/主进程] 使用者:无法连接到来宾 amqp://:**@127.0.0.1:5672//: [Errno 111] 连接被拒绝。在 2.00 秒后重试...

    127.0.0.1是一个特殊的IP地址,意思是“我”,在容器内部意思是“我这个容器”,所以这就是它没有连接到外部主机的原因。所以要做的第一件事是将您试图连接Rabbit的IP地址更改为运行它的外部主机的IP地址。

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

     类似资料:
    • 问题内容: 我看到很多人都在为此苦苦挣扎,好像在redis容器映像中可能有一个错误,而其他人似乎在追寻类似的问题。 我在DockerHub上使用标准Redis映像。(https://github.com/dockerfile/redis) 像这样运行它: 进入服务器后,就可以启动服务器,并从容器映像进行Redis ping了。 不幸的是,我无法从主机连接到Redis容器。 我已经尝试设置,例如下面

    • 我按照官方指示在Ubuntu 16.04上安装了docker,并成功地将注册表作为容器运行。我想远程连接到另一个容器,所以我尝试: 我得到一个错误: 连接过程中出错:Posthttp://1.2.3.4:2375/v1.29/containers/19f36d1bdfaf/exec: 拨打tcp 1.2.3.4:2375:connectex:无法建立连接,因为目标计算机主动拒绝连接。 为什么会出现

    • 环境详细信息 Windows 10 Docker桌面 Spring Boot(在容器内使用) RabbitMQ(作为服务安装在我的windows机器上) 我想从Spring Boot Container访问RabbitMQ服务。我在里面提供了下面的属性application.properties 我正在运行我的Spring启动应用程序 docker run-p 8083:8083 dockerde

    • 我正在使用一个安装了docker的docker映像,为了运行任务来清理我的kubernetes集群中每个节点上的docker映像数据。我尝试使用Daemonset,因为它将在除master之外的每个节点上运行,但是在docker容器中运行cron被证明是徒劳的。 因此,我尝试使用K8s Cronjob,它定期运行,具有以下属性: 和 我正在运行一个 shell 脚本,该脚本从上述 CronJob

    • 我已经正确地设置了Docker,并运行了一些容器没有问题。现在我试着设置邮件。我试了两个: 1 https://hub.docker.com/r/paintedfox/postgresql/ 2 https://hub.docker.com/_/postgres/ 我已尝试在VirtualBox中为容器设置端口转发。 我还尝试了机器主机,如Kitematic:192.168.99.100所示

    • 有两个相关的问题,但他们没有完全回答问题。但如果国防部认为这是复制品,请告诉我。 编辑:我在Linux上使用docker,并且非常希望不在主机模式下运行容器。