当前位置: 首页 > 面试题库 >

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

颛孙晗昱
2023-03-14
问题内容

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

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

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

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


问题答案:

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

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

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

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

例如参见:

  • github
  • consul
  • zookeeper

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

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



 类似资料:
  • 问题内容: 创建新容器后,是否可以运行命令以从主机获取容器的IP地址? 基本上,一旦Docker创建了容器,我想滚动自己的代码部署和容器配置脚本。 问题答案: 该的选项就派上用场了。 现代Docker客户端语法为: 旧的Docker客户端语法为: 这些命令将返回Docker容器的IP地址。 如注释中所述:如果在Windows上,请在花括号周围使用双引号而不是单引号。

  • 正如标题所说。我需要能够检索docker主机的IP地址,以及从主机到容器的端口映射,并在容器内部完成此操作。

  • 问题内容: 我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器? 编辑:我正在Linux机器上本地运行docker。 更新: 除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作: 问题答案: 在Linux上本地运行Docker时,您可以使用接口

  • 我有一个docker容器在运行Jenkins。作为构建过程的一部分,我需要访问在主机上本地运行的web服务器。有没有一种方法可以将主机web服务器(可以配置为在端口上运行)公开给jenkins容器? 编辑:我正在Linux机器上原生运行docker。 更新: 除了@larsks下面的答案之外,要从主机获取主机IP的IP地址,我还做了以下操作:

  • 问题内容: 如标题所示。我需要能够检索Docker主机的IP地址和从主机到容器的端口映射,并在容器内部进行操作。 问题答案: 正如@MichaelNeale注意到的那样,没有必要使用此方法(除非仅在构建时需要此IP),因为此IP将在构建时进行硬编码。

  • 除了使用环境变量之外,还有哪些方法可以从运行在该主机上的容器内部获取docker主机的主机名?我知道我可以在容器创建时将主机名作为环境变量传递给容器。我想知道如何在运行时查找它。 在docker主机中运行的容器是否有方法获得“foo.example.com”? 编辑以添加用例: 容器将为表单的服务发现创建一个SRV记录 其中20003是docker主机上动态分配的端口,用于侦听bar中某个固定端口