Как получить длинное имя хоста docker контейнера внутри контейнера? - PullRequest
0 голосов
/ 27 января 2020

Наше приложение работает за обратным прокси-сервером traefik. Мы управляем многими поддоменами и используем возможность traefik для наблюдения за файлами для динамической настройки новых поддоменов для прокси. Таким образом, наше приложение генерирует конфигурационный файл traefik .yaml dynamici c.

Один и тот же traefik будет управлять многими экземплярами одного и того же приложения. добраться до нашего приложения внутри собственной сети. Мы знаем, что можем использовать простое имя хоста, которое является именем контейнера. Но это работает только внутри стандартной сети docker экземпляра приложения, но не во внешней сети, используемой совместно с traefik.

Для этой версии требуется длинное имя хоста, поэтому мы уверены, что оно достигло нужного экземпляра приложения. (<compose_name>_<container_name>_1 или в зависимости от docker -композитной версии (<compose_name>_<container_name>_1_<hash>)

Вы знаете способ получить длинную версию имени хоста docker -композитного контейнера внутри другого контейнера того же docker -создать сеть по умолчанию?

Для лучшего контекста, вот простой файл 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 с длинным именем хоста, чтобы мы могли использовать ее для генерации конфигурации Dynami c для traefik.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 января 2020

Мы думали, что нашли решение. Запрашивая полное доменное имя с коротким именем хоста, введите требуемое длинное имя хоста.

dig +short -x `dig +short nginx`

Return composename_app_1.composename.app_network.

В нашем приложении python мы можем получить тот же результат с

import socket
socket.getfqdn('nginx')
...