sql-server - 无法使用 JDBC 连接 Docker SQL Server(但 SSMS 有效)
问题描述
语境
我有一个在 Docker(Linux 容器)中运行的 SQL Server 实例。该端口映射到 1433:1433,使其在主机上可用。它有一个用户名和一个用于身份验证的强密码。
docker run --name sql1 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=P4ssw0rd" -p 1433:1433 -d microsoft/mssql-server-linux:2017-latest
要连接 SQL Server Management Studio,我可以简单地使用以下命令:
- 服务器名称:本地主机
- 登录:sa
- 密码:P4ssw0rd
问题
它完全按预期工作。但是,当我尝试连接 JDBC(通过 JBoss)时,连接失败。数据源相关部分如下:
<connection-url>jdbc:sqlserver://localhost</connection-url>
<security>
<user-name>sa</user-name>
<password>P4ssw0rd</password>
</security>
当我在启用 TCP/IP 的情况下运行本地 SQL Server Express 实例(而不是 Docker)时,与 JDBC 的连接工作得非常好,所以问题不在于我的 JDBC 配置的结构。主要区别在于我在那里使用命名实例(MACHINE\INSTANCE_NAME)而不是像 localhost 这样的主机名。这可能与连接问题有关吗?
更新
在使用本地安装的 JDBC 驱动程序进行调试时,我设法通过使用机器名而不是 localhost 来使其工作。但是,JBoss 仍然不想与之连接,所以问题仍然存在。
我还发现,如果我把端口改成无效端口,连接需要很长时间然后超时,而标准的1433端口立即报错。这确实表明 SQL Server 肯定在该端口上运行。
解决方案
推荐阅读
- git - Git:如何签出从另一个提交创建的提交?
- python - 当我只能以只读模式打开某些文件时,使用 Python comtypes 打开和保存 word 文件?
- xamarin.forms - Esri.ArcGISRuntime 异常:对象已在 Xamarin 表单中拥有
- python - 返回 Django 中元组选择的值
- spring-boot - Spring-Cloud-Kubernetes propertySource 顺序
- python - Create new column based on data type and shift data there
- vue.js - 如何修复 vuejs/vuetify 项目中的 steamalert2 font-family 问题?
- postgresql - psql 要求输入用户密码,即使我提供了正确的密码,它也会返回错误
- laravel - 嵌套急切加载特定列
- vb.net - 无法使用 Discord.net 对 Discord 消息做出有问题的反应:错误:服务器响应错误 404:NotFound