繁体   English   中英

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

[英]Unable to connect to SQL Server inside docker container

我有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内部使用此选项-S 172.17.0.1 ,它可以正常工作。

任何想法如何通过sqlcmd从具有应用程序的容器连接到具有数据库的容器?

更新资料

我弄错了,我使用了从docker-container传递带有数据库的命令。 从应用程序到数据库的连接仍然有问题

单程。 最“值得信任”的方式恕我直言。

您必须将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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM