Docker-连接到容器中的开放端口

时间:2018-06-25 12:24:31

标签: docker docker-container docker-networking docker-network

我是Docker的新手,也许这是我尚不完全了解的事情,但是我想做的是连接到正在运行的Docker容器中的开放端口。我已经从中心(https://hub.docker.com/_/rabbitmq/)拉出并运行了Rabbitmq容器。 Rabbitmq容器应使用端口5672进行客户端连接。

运行容器后(按照中心页面的说明):

$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3

现在我要做的是将telnet连接到打开的帖子中(可以在常规的Rabbitmq安装中使用,也应该在容器中)。

我(至少我想是的)已经使用以下命令获得了容器IP地址:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

我得到的结果是172.17.0.2。当我尝试使用telnet 172.17.0.2 5672进行访问时,失败。

地址172.17.0.2对我来说似乎很奇怪,因为如果我在计算机上运行ipconfig,则看不到任何使用172.17.0.x地址的接口。我确实使用以下IP来查看Ethernet adapter vEthernet (DockerNAT)10.0.75.1。这是应该的样子吗?

如果我进行端口绑定(添加-p 5672:5672),则可以使用telnet localhost 5672远程登录到此端口并立即连接。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

正如您所指出的,您需要端口绑定才能获得所需的结果,因为您正在通过默认的网桥网络运行应用程序(我猜是在Windows上)。

official docker doc

  

连接到相同用户定义网桥网络的容器会自动将所有端口彼此公开,而不会向外界公开任何端口。 [...]    如果在默认网桥网络上运行相同的应用程序堆栈,则需要使用-p或--publish标志分别打开Web端口和数据库端口。这意味着Docker主机需要通过其他方式阻止对数据库端口的访问。

稍后,在rabbitmq集线器中,有一个对管理插件的引用,该插件是通过执行命令

运行的
docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management

其中公开了用于管理的端口8080,我认为这是您可能需要的。 您还应该注意到,他们谈论那里的集群和节点,也许它们意味着容器将作为服务在集群中运行(因此使用覆盖网络而不是桥接网络)。

希望我能以某种方式提供帮助:)