2016-06-13 133 views
2

好的,我很新Docker世界。所以这可能是一个非常基本的问题。如何从主机连接到Docker上的服务器?

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

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脚本消息。我想发送这些消息给我的“兔子容器”。因此我想从我的主机(Mac OSX)连接到这个容器。

这甚至可能吗?如果是,如何?

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

+0

运行命令'docker run -d -t -i -name rmq -p 5672:5672 rabbitmq:3-management',更具体地说是选项'-p 5672:5672'请求Docker守护进程绑定你的主机-ip端口5672与容器端口5672.因此,如果你尝试从主机到'nc 127.0.0.1 5672',你会看到连接到RabbitMQ插座的'nc'。您可以使用此套接字通过网络本地堆栈与它进行通信。 – Auzias

回答

2

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

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,它将Docker容器中的RabbitMQ侦听端口映射到主机操作系统。

1

如果你正在运行在您的本地系统OSX这个容器,那么你应该通过运行找到您的默认泊坞窗机IP地址:

docker-machine ip default 

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

这是因为码头工人在OSX和Windows虚拟化引擎运行,所以当你的端口映射到主机,你实际上它映射到虚拟机。

+0

没有工作。另外,直到现在,我还没有运行“docker-machine”。为什么有必要? – Bhushan

+0

在官方的dockerhub图片页面https://hub.docker.com/_/rabbitmq/上说rabbitmq:3-management在端口15672上运行。停止你的容器,将其移除并再次运行,以便正确映射端口并通过'HTTP:// <搬运工机-IP>:15672'。在docker-machine上查看官方文档以获取更多信息https://docs.docker.com/machine/overview/ –

+0

@Bhushan当您运行docker-machine ls'时,'default'被列为'running'?虽然在OSX上安装docker时看不到'docker-machine',这就是boot2docker虚拟机的设置和管理方式(https://github.com/docker/toolbox/blob/fcdf7c37950dab9658556b1566b4363fa930878b/osx/) MPKG/quickstart.app /内容/资源/脚本/ start.sh)。 – Matt

0

你说你从来没有使用过泊坞窗机,所以我假设你正在使用的泊坞测试版的Mac(你应该看到菜单栏顶部的泊坞窗图标)。

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

  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脚本:5672

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

+0

感谢您的意见。是的,我正在使用Docker Beta。我通过将RMQ侦听端口映射到主机操作系统来解决了我的问题。我张贴我的发现作为另一个答案。 – Bhushan

0

你需要与暴露的端口5672上运行的容器,或许15672,以及如果你想WebUI和5671(如果使用SSL),或者您在rabbitmq中为其添加tcp侦听器的任何其他端口。 如果您有rabbitmq容器的特定IP和主机名称,这也会更容易。要做到这一点,你需要创建自己的搬运工网络

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

+0

感谢您的帮助。我通过将RMQ端口映射到主机操作系统来解决此问题。 – Bhushan

相关问题