【问题标题】:Docker container can't connect to SQL Server on a remote serverDocker 容器无法连接到远程服务器上的 SQL Server
【发布时间】:2020-03-13 01:02:03
【问题描述】:

我有一个容器托管的 ASP.NET Core 应用程序,但它无法连接到远程服务器上的 SQL Server。

错误是:

与 SQL Server 建立连接时出现与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,并且 SQL Server 已配置为允许远程连接。

这是我已经检查过的:

  • 尝试禁用主机和数据库服务器上的防火墙。 : 还是报错
  • 编辑连接字符串以使用 IP 和端口:仍然出现错误
  • 从应用程序容器 Ping 到 DB 服务器:我可以正常 ping 到 DB 服务器
  • 通过SQL Server Management Studio连接数据库服务器:可以正常连接

所以我认为容器可以看到数据库服务器但无法连接。我还应该检查什么?

非常感谢您的帮助。

更新

Dockerfile:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 1433

#our sql server was use this port for connect
EXPOSE 64608

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /src

COPY Web.API.sln ./
COPY MyProject.Core/*.csproj ./MyProject.Core/
COPY MyProject.API/*.csproj ./MyProject.API/

RUN dotnet restore
COPY . .

WORKDIR /src/MyProject.API
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.API.dll"]

运行 Docker 命令:

docker build -t myproject-api:latest .

docker run -d -p 7991:80 --name myproject-api myproject-api:latest

连接字符串:

"data source=172.16.0.88\\SQL_DEV,64608; initial catalog=MyProject; persist security info=True; user id=myuser; password=mypassword;"

【问题讨论】:

  • 假设远程 SQL Server 是侦听端口 1433 的默认实例,请使用 powershell -Command echo ((new-object Net.Sockets.TcpClient).Client.Connect('your-database-server', 1433)) 'success' 从容器内部检查远程端口连接
  • 发布 Docker 文件和用于运行容器的命令。
  • @DanGuzman 谢谢你的建议。我对 Docker 很陌生。在我了解如何在我的容器中运行 powershell 命令后,我将尝试它。
  • @Max 我已经在帖子中更新了 docker 文件和命令。谢谢。
  • @LLF 尝试删除所有EXPOSE 1433, EXPOSE 64608。这些是不需要的。你能提供设置吗,你是如何创建连接字符串的?

标签: sql-server docker asp.net-core


【解决方案1】:

这很可能是因为连接字符串。

将您的连接字符串更改为如下所示

Server=172.16.0.88\\SQL_DEV,64608;Database=MyProject;UserId=myuser;Password=mypassword

Server=172.16.0.88,64608;Database=MyProject;User Id=myuser;Password=mypassword

哪个有效。

【讨论】:

  • 这是我的连接字符串。有什么奇怪的吗? "数据源=172.16.0.88\\SQL_DEV,64608;初始目录=MyProject;持久安全信息=True;用户ID=myuser;密码=mypassword;"
  • 删除persist security info
  • 你能在Visual Studio的调试模式下连接吗
  • 它在 vs. 上工作得非常好,或者直接部署在 iis 上。您是否只是在编辑中删除了实例名称?
  • 我不太确定实例名称。尝试使用实例名称,然后尝试使用它。从我的答案中复制并用您的数据库名称用户名和密码替换它们
【解决方案2】:

我遇到了同样的问题,我更改了我的 Dockerfile 映像

我替换它

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base

用这条线

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic AS base

现在可以了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2016-12-26
    • 2021-06-13
    • 2019-11-19
    • 2019-08-11
    相关资源
    最近更新 更多