无法连接到Docker容器内的SQL Server

时间:2019-07-09 14:33:11

标签: sql sql-server docker sqlcmd

我有2个docker容器(在其中一个中,我的另一个SQL Server中有一个应用程序)。

我试图从具有应用程序的docker-container连接到另一个容器内的SQL Server数据库。

为此,我做到了:

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

遇到问题后:

  

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:登录超时已过期。

     

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:TCP提供程序:错误代码0x2749。

     

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:建立与SQL Server的连接时,发生了与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。检查实例名称是否正确以及SQL Server是否配置为允许远程连接。有关更多信息,请参见SQL Server联机丛书。

当我在不带-S 172.17.0.1的SQL Server数据库中的docker-container内部使用此选项时,它可以正常工作。

有什么想法如何通过sqlcmd从带有应用程序的容器到带有数据库的容器?

更新

我错了,我曾经使用docker-container将此命令与数据库一起传递。 从应用程序到数据库的连接仍然有问题

1 个答案:

答案 0 :(得分:0)

一种方式。最“值得信任”的方式恕我直言。

您必须将sql-server公开为SERVICE。

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”。是公开服务的名称空间。

注意“ mssql-service-deployment”的重复(相同的字符串值)

在此处记录:

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

  

创建服务时,它会创建一个相应的DNS条目。这个   条目的形式   ..svc.cluster.local,这意味着   只是使用一个容器,它将解析为服务   它是名称空间的本地名称。这对于使用相同的功能很有用   跨多个名称空间(例如开发,暂存)进行配置   和生产。如果要跨命名空间访问,则需要   使用完全限定的域名(FQDN)。