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 上)连接应用程序。
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,我认为这是您可能需要的。
您还应该注意到他们在那里谈论集群和节点,也许他们的意思是容器 运行 作为群中的服务(因此使用覆盖网络而不是桥接网络)。
希望我能以某种方式提供帮助:)
我是 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 上)连接应用程序。
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,我认为这是您可能需要的。 您还应该注意到他们在那里谈论集群和节点,也许他们的意思是容器 运行 作为群中的服务(因此使用覆盖网络而不是桥接网络)。
希望我能以某种方式提供帮助:)