Docker compose 如何在容器中获取docker容器的长主机名?

Docker compose 如何在容器中获取docker容器的长主机名?,docker-compose,traefik,Docker Compose,Traefik,我们的应用程序支持traefik反向代理。我们管理许多子域,并使用traefik的监视文件功能动态设置要代理的新子域。 因此,我们的应用程序生成一个traefik.yaml动态配置文件 同一traefik将管理同一应用程序的多个实例 为此,我们需要向traefik说明如何在其自己的网络中访问我们的应用程序。 我们知道我们可以使用简单的主机名,即容器名。 但这只在应用程序实例的默认docker compose网络中起作用,而不在与traefik共享的外部网络中起作用 这一个需要长主机名版本,因此我

我们的应用程序支持traefik反向代理。我们管理许多子域,并使用traefik的监视文件功能动态设置要代理的新子域。 因此,我们的应用程序生成一个traefik.yaml动态配置文件

同一traefik将管理同一应用程序的多个实例

为此,我们需要向traefik说明如何在其自己的网络中访问我们的应用程序。 我们知道我们可以使用简单的主机名,即容器名。 但这只在应用程序实例的默认docker compose网络中起作用,而不在与traefik共享的外部网络中起作用

这一个需要长主机名版本,因此我们确保它到达正确的应用程序实例。 (
\uuu 1
或取决于docker编写版本(
\uu 1

您知道在同一docker compose默认网络的另一个容器中获取docker compose容器主机名的长版本的方法吗

为了获得更好的上下文,这里提供了一个简单的docker-compose.yaml文件

version: "3"

services:
  app:
    image: app_image
    networks:
      - app_network
    restart: unless-stopped

  nginx:
    image: nginx
    links:
      - app
    networks:
      - app_network
      - traefik_traefik
    restart: unless-stopped

networks:
  traefik_traefik:
      external: true
  app_network:
      driver: bridge
我们希望从
app
容器内部获得
nginx
长主机名版本,以便使用它生成traefik的动态配置


感谢您的帮助。

我们认为已经找到了一个解决方案。查询短名称主机名的FQDN可以得到所需的长主机名

dig +short -x `dig +short nginx`
返回
composename\u app\u 1.composename.app\u网络。

在我们的python应用程序中,我们可以使用

import socket
socket.getfqdn('nginx')