Невозможно подключиться к SQL Server внутри контейнера Docker - PullRequest
0 голосов
/ 09 июля 2019

У меня есть 2 док-контейнера (внутри одного из них у меня есть приложение, внутри другого SQL Server).

Я пытался подключиться из docker-контейнера с приложением к базе данных SQL Server внутри другого контейнера.

Для этого я сделал:

 root@application:/# sqlcmd -S 172.17.0.1 -U sa -P test

После того, как у меня возникла проблема:

Sqlcmd: Ошибка: Драйвер Microsoft ODBC 17 для SQL Server: истекло время ожидания входа.

Sqlcmd: ошибка: драйвер 17 Microsoft ODBC для SQL Server: поставщик TCP: код ошибки 0x2749.

Sqlcmd: Ошибка: Драйвер Microsoft ODBC 17 для SQL Server: при установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или недоступен. Проверьте, правильно ли указано имя экземпляра и настроен ли SQL Server для разрешения удаленных подключений. Дополнительные сведения см. В электронной документации по SQL Server.

Когда я использовал эту опцию внутри docker-контейнера с базой данных SQL Server без -S 172.17.0.1, она работает нормально.

Есть идеи, как подключиться из контейнера с приложением к контейнеру с базой данных через sqlcmd?

Обновление

Я ошибся, я использовал передачу этой команды из docker-контейнера с базой данных. По-прежнему есть проблема с подключением из приложения к базе данных

1 Ответ

0 голосов
/ 09 июля 2019

В одну сторону.ИМХО самый надежный способ.

Вы должны выставить свой sql-сервер как СЕРВИС.

apiVersion: v1
kind: Service

metadata:
  name: mssql-service-deployment
  #namespace: mycustomnamespace
spec:
  selector:
    app: mssql
  ports:
    - protocol: TCP
      port: 1433
      targetPort: 1433
  type: LoadBalancer

..

Тогда ваша строка соединения становится:

jdbc:sqlserver://mssql-service-deployment.default.svc.cluster.local;DatabaseName=MyDB;"

где ".default".это NAMESPACE открытой службы.

Обратите внимание на повторение (то же строковое значение) «mssql-service-deploy»

Это задокументировано здесь:

https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#namespaces-and-dns

При создании службы создается соответствующая запись DNS.Эта запись имеет вид ..svc.cluster.local, что означает, что если контейнер только использует, он будет преобразован в службу, которая является локальной для пространства имен.Это полезно для использования одной и той же конфигурации в нескольких пространствах имен, таких как разработка, подготовка и производство.Если вы хотите охватить пространства имен, вам нужно использовать полное доменное имя (FQDN).

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