【问题标题】:How can I see a dynamically assigned port from within a docker container?如何从 docker 容器中查看动态分配的端口?
【发布时间】:2015-04-01 02:06:09
【问题描述】:

我有一个服务器应用程序需要几分钟才能完全启动并准备好处理请求。当容器知道它已经启动时,我想让容器向 NGINX 负载均衡器注册自己,但我不知道如何确定分配给容器的端口 docker(我用 docker run 开始了很多这些 - P)。有什么想法吗?

谢谢,

伊恩

【问题讨论】:

    标签: nginx docker


    【解决方案1】:

    默认情况下,您无法从容器内部与 docker 守护程序对话,您也不应该尝试这样做。从容器的角度来看,它在端口 80 或任何 webapp 的默认端口上运行进程。

    要确定分配给容器的端口,您可以在运行容器的主机上使用docker portdocker inspect 命令。

    docker port my_webapp_1 这将返回容器的映射端口列表。

    docker inspect my_webapp_1

    这将返回一个 json,您可以在其中找到 NetworkSettings,其中列出了容器的所有端口以及它们映射到的主机端口。

    您可以运行一个额外的进程,从 docker portdocker inspect 读取此数据并更新您的 nginx 配置。

    【讨论】:

    • 谢谢,这并不理想,因为从进程外部判断它是否准备好开始接收请求并不容易。如果新启动的进程能以某种方式通知 docker 它已经准备好了,那就容易多了。
    【解决方案2】:

    您可以从容器内部使用hostname(等于容器ID)并将其发送到主机。然后主机将在该主机名上使用docker inspect 来获取端口。

    【讨论】:

    • 我不确定您所说的“发送给主机”是什么意思。我该怎么做?
    • @IanG 在你写的 OP 中“我想让容器在 NGINX 负载均衡器知道它已经启动时注册它自己”所以我假设你有一个机制。如果你知道端口号,你打算怎么做?
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2016-05-27
    • 2017-02-26
    • 2018-08-10
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多