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

Docker - connecting to an open port in a container

我是 docker 的新手,也许这是我还没有完全理解的东西,但我想做的是连接到 运行ning 中的一个开放端口docker 容器。我已经从集线器 (https://hub.docker.com/_/rabbitmq/) 中提取并 运行 rabbitmq 容器。 rabbitmq 容器应使用端口 5672 供客户端连接。

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

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

现在我想做的是通过 telnet 进入开放 post(在常规的 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 地址的接口。我确实看到 Ethernet adapter vEthernet (DockerNAT) 使用以下 ip:10.0.75.1。这是应该的样子吗?

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

我在这里错过了什么?

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

来自official docker doc

Containers connected to the same user-defined bridge network automatically expose all ports to each other, and no ports to the outside world. [...] If you run the same application stack on the default bridge network, you need to open both the web port and the database port, using the -p or --publish flag for each. This means the Docker host needs to block access to the database port by other means.

稍后在 rabbitmq 中心有一个管理插件的引用,它是 运行 通过执行命令

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

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

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