Docker DNS с несколькими проектами, использующими одну сеть - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть следующий docker-compose.yml файл:

version: '3'
services:
    frontend:
        image: alpine
        command: tail -f /dev/null
        networks:
            - shared
            - default
    backend:
        image: alpine
        command: tail -f /dev/null
        networks:
            - shared
            - default
networks:
    shared:
        external: true

На основе указанного выше файла я создаю два проекта, которые используют одну и ту же сеть (shared) и одинаковые имена служб (frontendbackend):

docker-compose -p foo up -d
docker-compose -p bar up -d

Проверяет ли DNS докер, что docker-compose -p foo exec frontend ping backend разрешает только внутренний контейнер в проекте foo и наоборот для проекта bar?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Если вы используете Docker Swarm, вы можете указать имена хостов с помощью имени сервиса для устранения неоднозначности контейнеров.Но я не верю, что это делает docker-compose.

0 голосов
/ 04 февраля 2019

Согласно https://github.com/docker/compose/issues/4645, порядок разрешения в этом случае недетерминирован.Поскольку сеть преобразуется в неупорядоченный dict в golang, порядок не сохраняетсяЭто означает, что https://github.com/docker/libnetwork/blob/master/sandbox.go#L593 порядок запрашиваемых конечных точек не соответствует порядку сети.

Решение состоит в том, чтобы определить https://docs.docker.com/compose/compose-file/compose-file-v2/#priority, если используется docker-compose version 2. Или полное имя DNS, например service.network, например backend.foo_default или backend.shared.

0 голосов
/ 03 февраля 2019

На основании ваших настроек я использовал nslookup, чтобы выяснить, является ли разрешение DNS изолированным.

$ docker-compose -p foo exec frontend nslookup backend

Name:      backend
Address 1: 172.19.0.2 foo_backend_1.shared
Address 2: 172.19.0.4 bar_backend_1.shared

Как видно из приведенного выше вывода, backend разрешаетв оба контейнера .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...