Контейнер Docker: невозможно подключиться к SQL Server по имени

Jose спросил: 12 мая 2018 в 03:43 в: sql-server

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

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

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

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

    docker network create --driver=bridge specsnet
    

  2. Запустить SQL Container

    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 Tools)

    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 (Success - IP was 172.18.0.2)

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

  6. Проверить соединение с именем (Fails)

    sqlcmd -S tcp:TestDBServer,1433 -U sa -P 'Password!123456'
    
    литий> ол>

2 ответа

Bjoern Rennhak ответил: 12 мая 2018 в 06:44

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

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

Есть решение
Jose ответил: 12 мая 2018 в 10:31

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

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

  1. Файл Docker Compose

    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:
          - specsnetnetworks:
      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'