Мы запускаем кучу сервисов в их собственных контейнерах через 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