一尘不染

如何从Docker容器获取主机上的映射端口?

docker

我想在不同主机上的某些Docker容器中运行任务。而且我编写了一个管理器应用程序来管理容器(启动任务,停止任务,获取状态等)。容器启动后,它将向管理器发送一个http请求及其地址和端口,因此管理器将知道如何管理该容器。

由于同一主机上可能运行着多个容器,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个端口。

如何 Docker容器中获取映射的端口?

这里有一个解决方案,我如何从docker容器中知道主机的映射端口?。但是,如果我使用-
P运行容器,则不适用。由于这个问题是在一年多以前提出的,所以我想知道也许有新功能添加到了Docker中以解决此问题。


阅读 547

收藏
2020-06-17

共1个答案

一尘不染

容器启动后,它将向管理器发送一个http请求及其地址和端口

这是行不通的。从容器内部,您无法确定容器端口映射到哪个Docker主机端口。

我能想到的是哪种方法最有效,并且与您所描述的最接近,这是 使容器打开与管理器的websocket连接
。这样的连接将允许您的管理器和容器之间通过HTTP进行两种方式的通信。


您试图实现的目标称为服务发现。已经有用于Docker的服务发现工具。您应该选择其中之一,而不要尝试自己制造。

例如参见:


如果您确实要实现服务发现系统,那么一种方法是让您的经理使用docker event命令(或docker客户端库之一)。这样一来,您的经理就可以在容器方面无任何事的情况下收到有关容器创建/删除的通知。

然后查询Docker主机以使用找出映射到您的容器的端口docker port

2020-06-17