Kid*_*per 6 sql-server containers docker wsl-2
我已经设置了 WSL2 Ubuntu。现在我正在使用 Docker 在 1401 端口上运行本地 SQL Server 实例。
集装箱港口:
0.0.0.0:1401->1433/tcp
我想从 SSMS 连接此实例,但收到以下错误:
服务器名称:localhost,1401 错误:
无法连接到本地主机,1401。
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。
服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。
(提供程序:TCP 提供程序,错误:0 - 等待操作超时。)(Microsoft SQL Server,错误:258)
[解决方案] 我可以通过WSL2 IP连接它。我在 WSL2 中运行“hostname -I”命令并在 SSMS 中使用相同的 IP。而且,我能够建立联系
第一个问题——Windows 中是否有运行/连接的 VPN?如果是这样,请忽略其余部分并首先怀疑这一点。确保 VPN 未运行,停止 Docker,发出 a wsl --shutdown,重新启动并重试。
假设这不是问题...
通常,WSL2 提供称为“本地主机转发”的功能,该功能允许 Windows 上的服务/应用程序使用localhost. 它本质上会获取任何未定向到 Windows 下绑定端口的本地主机流量,并将其转发到 WSL2 的 Hyper-V 虚拟网络。
所有 WSL2 实例(包括 Docker 实例)共享相同的 WSL2 网络接口,因为它们都在同一虚拟机/内核中运行。
因此,您在尝试从 SSMS 连接时似乎做了正确的事情localhost。
但是......有时本地主机转发会中断。有两种常见(相关)情况可能会导致这种情况(或许还有其他情况):
首先检查以确保您可以从WSL2中访问 1401 :
nc -zv localhost 1401
Run Code Online (Sandbox Code Playgroud)
^^^ 假设已安装 netcat,这是 WSL2 Ubuntu 发行版中默认安装的。对于其他发行版,请安装它或通过其他方法检查连接。
如果不成功,那么我怀疑 SQL Server 中存在一些配置问题。
如果成功,则在 Windows 主机的 PowerShell 中运行相同的测试:
Test-NetConnection -ComputerName "localhost" -Port 1401
Run Code Online (Sandbox Code Playgroud)
如果不成功,那么我怀疑本地主机转发问题。
旁注:我假设您正在运行 Docker Desktop,但如果您只是在 WSL2 实例中运行 Docker Engine,那没问题。只需忽略下面的 Docker Desktop 说明即可。
/etc/wsl.conf正在运行的 WSL2 实例中是否有提及禁用localhostForwarding. 我假设不会,因为这不是默认值。但是,如果您碰巧这样做,请确保将它们设置为true。wsl --shutdown
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4229 次 |
| 最近记录: |