我想在不同主机上的某些Docker容器中运行任务。而且我编写了一个管理器应用程序来管理容器(启动任务,停止任务,获取状态等)。容器启动后,它将向管理器发送一个http请求及其地址和端口,因此管理器将知道如何管理该容器。
由于同一主机上可能运行着多个容器,因此它们将被映射到不同的端口。要在我的经理上注册一个容器,我必须知道每个容器映射到哪个端口。
如何 在 Docker容器中获取映射的端口?
这里有一个解决方案,我如何从docker容器中知道主机的映射端口?。但是,如果我使用- P运行容器,则不适用。由于这个问题是在一年多以前提出的,所以我想知道也许有新功能添加到了Docker中以解决此问题。
容器启动后,它将向管理器发送一个http请求及其地址和端口
这是行不通的。从容器内部,您无法确定容器端口映射到哪个Docker主机端口。
我能想到的是哪种方法最有效,并且与您所描述的最接近,这是 使容器打开与管理器的websocket连接 。这样的连接将允许您的管理器和容器之间通过HTTP进行两种方式的通信。
您试图实现的目标称为服务发现。已经有用于Docker的服务发现工具。您应该选择其中之一,而不要尝试自己制造。
例如参见:
如果您确实要实现服务发现系统,那么一种方法是让您的经理使用docker event命令(或docker客户端库之一)。这样一来,您的经理就可以在容器方面无任何事的情况下收到有关容器创建/删除的通知。
docker event
然后查询Docker主机以使用找出映射到您的容器的端口docker port。
docker port