Назад | Перейти на главную страницу

Ссылка на несколько имен хостов в контейнере Docker с помощью файла compose

Мы запускаем кучу сервисов в их собственных контейнерах через Docker и подключаем их с помощью Docker Compose.

Ранее мы использовали связывание для ссылки на другие хосты, но проблема в том, что если контейнер перезапускается и получает новый IP-адрес, то связанные узлы не узнают об этом и перестанут работать.

Итак, мы создали сеть и дали имена нашим хостам, и это отлично работает. Однако у нас есть фиктивный компонент, который мы используем для тестирования, который заменяет два из других контейнеров. Я мог бы легко настроить это через ссылки, но я не знаю, как это сделать с сетью.

Изначально это было так:

mm:
  extends:
    file: common-service.yml
    service:  mm-container
  links:
    - mock:enet
    - mock:ff

(где mm контейнер, который знает о контейнерах enet и ff, и в этом файле композиции, используемом для тестирования, мы связываем их с mock контейнер вместо этого.)

Я попытался добавить это вместо ссылок:

extra_hosts:
  - "enet:mock"
  - "ff:mock"

(где enet и ff являются фиктивными именами хостов), но, конечно, это добавит эти строки в / etc / hosts как есть, поэтому разрешение имени хоста не будет.

Есть ли решение для этого в Docker-land, или нам нужно переписать наш инструмент для насмешек?

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

version: '3'

networks:
  mocknet:

services:
  mm:
    image: mm:latest
    networks:
      default:
      mocknet:

  other_svc:
    image: other_image:latest

  mock:
    image: mock:latest
    networks:
      mocknet:
        aliases:
        - ff
        - enet

Если все в этом стеке разрешено разрешать ff и enet в фиктивную службу, то вы можете отказаться от mocknet и просто установить псевдонимы в сети по умолчанию.

Пока их всего два, вы можете дать "имитировать" одно имя и одно имя хоста. Докер помещает их обоих в /etc/hosts

Итак, что-то вроде:

mock:
  [definitions of how to run 'mock']
  container_name: enet
  hostname: ff