首页 > 解决方案 > 无法使用 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,我可以简单地使用以下命令:

问题

它完全按预期工作。但是,当我尝试连接 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 肯定在该端口上运行。

标签: sql-serverdockerjdbc

解决方案


推荐阅读