我是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
远程登录到此端口并立即连接。
我在这里想念什么?
答案 0 :(得分:1)
正如您所指出的,您需要端口绑定才能获得所需的结果,因为您正在通过默认的网桥网络运行应用程序(我猜是在Windows上)。
连接到相同用户定义网桥网络的容器会自动将所有端口彼此公开,而不会向外界公开任何端口。 [...] 如果在默认网桥网络上运行相同的应用程序堆栈,则需要使用-p或--publish标志分别打开Web端口和数据库端口。这意味着Docker主机需要通过其他方式阻止对数据库端口的访问。
稍后,在rabbitmq集线器中,有一个对管理插件的引用,该插件是通过执行命令
运行的docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management
其中公开了用于管理的端口8080,我认为这是您可能需要的。 您还应该注意到,他们谈论那里的集群和节点,也许它们意味着容器将作为服务在集群中运行(因此使用覆盖网络而不是桥接网络)。
希望我能以某种方式提供帮助:)