好的,我对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)连接到此容器。
这甚至可能吗?如果是,怎么样?
如果需要更多详细信息,请与我们联系。
答案 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命令是正确的。如果您现在想要连接到兔子,您有两种选择:
将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
。
在主机上执行python脚本并使用localhost:5672
python ~/Documents/myscripts/migrate_data.py amqp://localhost:5672/ ~/Documents/queue/