Поиск DNS для Service Container во внутренней сети Docker не работает на Linux - PullRequest
0 голосов
/ 10 февраля 2020

Я создал контейнер службы Docker, который отлично работает на моей машине windows, но когда я пытаюсь запустить его на моей машине Linux, возникает проблема, что служба не может найти внедренную службу.

Подробности:

  1. Служба Контейнер, созданный с использованием docker compose file.
  2. Контейнер службы B, введенный с помощью переменной Environment в контейнер службы A
  3. Служба контейнер работает нормально, а также контейнер службы B работает нормально.
  4. Проблема возникает при попытке контейнера службы A для доступа к услуге Б контейнер. Контейнер Service B недоступен. Внутренний DNS для службы B не может быть разрешен контейнером службы A.
  5. Служба A и контейнер службы B подключены к внутренней сети, созданной вручную как часть Docker compose файла. DNS для службы B легко разрешается, когда я запускаю эти Linux контейнеры на Windows хост-ОС, но при запуске его на Linux хост-системе происходит то же самое.

Я пытался некоторые вещи и пришли к выводу, что - Внутренний DNS службы B может быть разрешен службой A в Windows ОС хоста, но не может быть разрешен в Linux ОС.

DockerCompose ( Часть основного файла)

services:
  serviceb:
    container_name: serviceb
    image: serviceb
    restart: always
    ports: 
     - "30041:80"
    networks: 
     - internal-network
  servicea:
    container_name: servicea
    image: servicea
    restart: always
    ports: 
     - "30091:80"
    networks: 
     - internal-network
    environment: 
      ConnectionString__Service: http://serviceb:80
    depends_on: 
      -serviceb
networks: 
  internal-network:
    driver: bridge
    name: test

Примечание: ServiceA и ServiceB предназначены для справочных целей

Я написал журналы в своем сервисе и могу проверить, что DNS разрешается в Windows, но не Linux. Почему Linux ведет себя по-разному - это главная проблема.

Журнал для Linux машины: Ниже приведен ответ, который я получаю при доступе к Сервису B. enter image description here

Единственное отличие, которое я вижу в моей среде windows и Linux, заключается в том, что в среде Windows нет прокси, а в среде Linux есть прокси.

Edit 1: Я много искал и теперь могу выяснить, что проблема возникает только в прокси-сети. Я могу подтвердить это, потому что установка работает нормально на машине без прокси-сети. Я установил прокси в файле /etc/systemd/system/docker.service.d/proxy.conf, и он переносится внутри Docker Контейнер.

1 Ответ

0 голосов
/ 13 февраля 2020

Проблема, безусловно, заключалась в том, что Прокси существовал в сети. Я изменил ~/.docker/config.json со значениями Proxy, а затем создал контейнеры. Значения прокси-сервера также были установлены внутри контейнеров, и когда я попытался сделать обнаружение службы, DNS не удалось.

Проблема: HTTP-клиент, который был создан для доступа к службе B из службы A, использовал значения Proxy. Значения прокси внутри контейнера препятствовали обнаружению службы.

Решение:

  1. Не устанавливать значения прокси внутри контейнера ie не изменять конфигурацию. json ИЛИ
  2. Создайте Http-клиент с useProxy=false
...