如何从主机连接到Docker上的服务器?

好的,我对Docker世界很新。 所以这可能是一个非常基本的问题。

我有一个运行在运行RabbitMQ的Docker中的容器。 假设这个容器的名字是“兔子容器”。

RabbitMQ容器是用这个命令启动的:

 docker run -d -t -i --name rmq -p 5672:5672 rabbitmq:3-management 

具有2个参数的Python脚本命令:

 python ~/Documents/myscripts/migrate_data.py amqp://rabbit:5672/ ~/Documents/queue/ 

现在,我正在从主机上运行一个Python脚本,它正在创build一些消息。 我想发送这些消息给我的“兔子容器”。 因此,我想从我的主机(Mac OSX)连接到这个容器。

这甚至有可能吗? 如果是的话,怎么样?

请让我知道是否需要更多的细节。

所以,我通过简单地将RMQ监听端口映射到主机OS来解决它:

 docker run -d -t -i --name rmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management 

我以前只有-p 15672:15672在我的命令。 这是将Docker容器映射到我的主机操作系统。 我添加了-p 5672:5672 ,它将Docker容器中的RabbitMQ侦听端口映射到主机操作系统。

如果您在本地OSX系统中运行此容器,则应通过运行以下命令find默认的docker-machine ip地址:

 docker-machine ip default 

然后你可以改变你的Python脚本指向<your_docker_machine_ip>:5672上的地址和映射端口。

发生这种情况是因为Docker在OSX和Windows上的虚拟引擎中运行,所以当您将端口映射到主机时,实际上是将其映射到虚拟机。

你说你以前从来没有使用过docker-machine,所以我假设你使用的是Docker Beta for Mac(你应该在顶部菜单栏中看到docker-icon)。

您的docker运行命令为兔子是正确的。 如果你现在想连接到兔子,你有两个select:

  1. 将你的python脚本包装在一个新的容器中,并将其链接到兔子:

    docker run -it --rm --name migration --link rmq:rabbit -v ~/Documents/myscripts:/app -w /app python:3 python migrate_data.py

    请注意,我们必须链接rmq:rabbit ,因为您将容器rmq但在脚本中使用了rabbit

  2. 在主机上执行你的python脚本并使用localhost:5672

    python ~/Documents/myscripts/migrate_data.py amqp://localhost:5672/ ~/Documents/queue/

您需要运行带有端口5672的容器,如果您需要WebUI,则可能需要15672,如果使用SSL,则需要5671,或者在rabbitmq中添加了tcp listener的任何其他端口。 如果您拥有rabbitmq容器的特定IP和主机名称,这也会更容易。 要做到这一点,你需要创build自己的dockernetworking

docker network create --subnet=172.18.0.0/16 mynet123

之后,像这样启动容器

docker run -d --net mynet123--ip 172.18.0.11 --hostname rmq1 --name rmq_container_name -p 15673:15672 rabbitmq:3-management

请注意,使用rabbitmq:3-management映像时,端口5672(已经是当我使用它的时候)已经暴露,所以不需要这样做。 --name是容器名称,– --hostname显然是主机名。

所以现在,从你的主机你可以连接到rmq1 rabbitmq服务器。