如何从docker容器中获取已发布的端口?

如何从docker容器中获取已发布的端口?,docker,network-programming,Docker,Network Programming,我编写了一个简单的点对点系统,在其中,当启动一个节点时 节点查找空闲端口,然后在该端口上访问其服务 它将其URL(包括端口)注册到中心服务器,以便其他节点知道如何连接到它 我觉得这是docker非常有用的一种典型任务,因此我想到为这些同行制作一个容器(我以前使用docker的经验只是编写一个hello world容器) 理想情况下,我会使用与现在运行的代码相同的代码从容器中映射(发布)我的公开端口到主机端口,但我可以想象这根本不可能,我可以通过使用检查端口可用性的脚本启动映像,然后在适当的空

我编写了一个简单的点对点系统,在其中,当启动一个节点时

  • 节点查找空闲端口,然后在该端口上访问其服务
  • 它将其URL(包括端口)注册到中心服务器,以便其他节点知道如何连接到它
我觉得这是docker非常有用的一种典型任务,因此我想到为这些同行制作一个容器(我以前使用docker的经验只是编写一个hello world容器)

理想情况下,我会使用与现在运行的代码相同的代码从容器中映射(发布)我的公开端口到主机端口,但我可以想象这根本不可能,我可以通过使用检查端口可用性的脚本启动映像,然后在适当的空闲主机端口上运行容器来解决这一问题。然而,如果第一种方法可行,那就更好了。为了明确起见,我在Python中执行了如下操作

    port = 5001
    while not port_is_free(port):
        port += 1
第二部分实际上必须从容器内部处理。假设它是用命令
docker run-p 5005:80 p2p node启动的,那么我需要从容器中找出公开端口80映射到的已发布端口5005

在这个网站和互联网上搜索,似乎有更多的人也有兴趣这样做,但我找不到解决办法,也不能肯定这根本无法做到


因此,这是我想问的主要问题:如何从运行的docker容器中查看我的公开端口映射到哪些已发布端口?

我不清楚您的一些要求

但是,如果只想知道哪个主机端口映射到容器的端口,只需传递一个环境变量。只是个主意

启动容器:

docker run -p 5005:80 -e HOST_PORT=5005 p2p-node
容器访问变量

echo $HOST_PORT

有一个docker的python库。

我不清楚您的一些要求

但是,如果只想知道哪个主机端口映射到容器的端口,只需传递一个环境变量。只是个主意

启动容器:

docker run -p 5005:80 -e HOST_PORT=5005 p2p-node
容器访问变量

echo $HOST_PORT

有一个docker的python库。

不清楚为什么需要主机端口。在docker中,容器可以相互通信,而不必暴露主机上的端口


只要对等应用是容器化的,就不需要暴露端口。集装箱可通过Docker网络连接,内部端口可用于集装箱之间的通信。

不清楚为什么需要主机端口。在docker中,容器可以相互通信,而不必暴露主机上的端口


只要对等应用是容器化的,就不需要暴露端口。集装箱可通过Docker网络连接,内部端口可用于集装箱之间的通信。

我需要从集装箱内访问公开端口80映射到的已发布端口5005
,我想知道您如何从集装箱访问5005?访问您的本地(容器)80是主机5005,不是吗?@NiksonKantiPaul抱歉,我不清楚,我不是想通过网络访问端口,只是为了获得发布的端口,即值5005。我将进行编辑。
我需要从容器中访问公开端口80映射到的已发布端口5005
,我想知道您如何从容器中访问5005?访问您的本地(容器)80是主机5005,不是吗?@NiksonKantiPaul抱歉,我不清楚,我不是想通过网络访问端口,只是为了获得发布的端口,即值5005。我会编辑的。谢谢,我不知道。在我的例子中,我也希望允许在docker之外运行的节点。谢谢,我不知道。在我的例子中,我也希望允许在docker之外运行的节点。