[英]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.