Контейнер Docker: невозможно подключиться к SQL Server по имени - PullRequest
0 голосов
/ 05 июня 2018

Я создал два контейнера в одной сети и один из них в качестве запущенного экземпляра Sql Server.В другом контейнере (с инструментами SQL) я могу подключиться к SQL, используя IP-адрес, но если я могу назвать имя машины, это не удается.

Я уже пытался сделать пинг машины, и DNS-этоРешив правильный IP, я также попробовал dnslookup, и он тоже работает.Кто-нибудь подскажет, как это исправить?

Полный сценарий тестирования:

  1. Создана новая сеть

    docker network create --driver=bridge specsnet
    
  2. Запуск контейнера SQL

    docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password!123456' -p 1401:1433 -d --name=TestDBServer --net=specsnet --rm microsoft/mssql-server-linux:latest
    
  3. Запуск нового контейнера с помощью инструментов SQL (для проверки соединения)

    docker run -it --net=specsnet --rm --entrypoint "bash" mcr.microsoft.com/mssql-tools:latest
    
  4. Загружены некоторые инструменты для устранения неполадок(в контейнер инструментов SQL)

    apt-get update | apt-get install telnet -y | apt-get install iputils-ping -y | apt-get install dnsutils -y | apt-get install nmap -y | apt-get install nano -y
    
  5. Проверка соединения с IP (Успешно - IP был 172.18.0.2)

    sqlcmd -S tcp:172.18.0.2,1433 -U sa -P 'Password!123456'
    
  6. ПроверкаСоединение с именем (Сбой)

    sqlcmd -S tcp:TestDBServer,1433 -U sa -P 'Password!123456'
    

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

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

Затем я начал манипулировать файлом, настраивая свойства, и обнаружил, что проблема связана симя контейнера SQL ( имя контейнера содержит буквы верхнего регистра ).Я установил имя контейнера SQL на «testdbserver», и все работало нормально.

  1. Файл составления Docker

    version: '2'
    services:
      testdbserver:
        image: microsoft/mssql-server-linux:latest
        ports:
          ["1401:1433"]
        environment:
          SA_PASSWORD: Password!123456
          ACCEPT_EULA: Y
        networks:
          - specsnet
    
      sqltools:
        image: mcr.microsoft.com/mssql-tools:latest
        depends_on:
          - testdbserver
        networks:
          - specsnet
    
    networks:
      specsnet:
        driver: bridge
        ipam:
         config:
           - subnet: 10.5.0.0/16
             gateway: 10.5.0.1
    
  2. Запуск контейнера инструментов SQL в режиме Bash

    docker-compose run sqltools bash
    
  3. Выполнить тестовое соединение SQL ( работает сейчас )

    sqlcmd -S tcp:testdbserver,1433 -U sa -P 'Password!123456'
    
0 голосов
/ 05 июня 2018

Часть TestDBServer вашего sqlcmd ссылается на так называемый Псевдоним сервера .Эти псевдонимы сервера недоступны из-за того, как вы сейчас настроили сеть Docker.Если вы переключитесь на Docker compose , чтобы настроить сеть для вас, она должна работать.

Альтернативным подходом было бы --link рассматриваемые контейнеры вместе.

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