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

时间:2016-06-13 23:18:50

标签: docker

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

我有一个在Docker中运行的容器,它正在运行RabbitMQ。假设这个容器的名称是“Rabbit-container”。

使用此命令启动RabbitMQ容器:

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

带有2个args的Python脚本命令:

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

现在,我正在从主机运行Python脚本,该脚本正在创建一些消息。我想将这些消息发送到我的“Rabbit-container”。因此,我想从我的主机(Mac OSX)连接到此容器。

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

如果需要更多详细信息,请与我们联系。

4 个答案:

答案 0 :(得分:4)

所以,我通过简单地将RMQ侦听端口映射到主机操作系统来解决它:

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

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

答案 1 :(得分:1)

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

docker-machine ip default

然后,您可以将python脚本更改为指向<your_docker_machine_ip>:5672上的地址和映射端口。

这是因为docker在OSX和Windows上的虚拟化引擎中运行,因此当您将端口映射到主机时,实际上是将其映射到虚拟机。

答案 2 :(得分:1)

你需要运行暴露端口5672的容器,如果你想要WebUI,也许需要15672;如果你使用SSL,你需要5671,或者你在rabbitmq中添加tcp监听器的任何其他端口。 如果你有一个特定的IP和rabbitmq容器的主机名也会更容易。为此,您需要创建自己的docker网络

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服务器。

答案 3 :(得分:0)

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

你的兔子的docker run命令是正确的。如果您现在想要连接到兔子,您有两种选择:

  1. 将python脚本包装在一个新容器中并将其链接到rabbit:

    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/

相关问题