连接到 docker 容器中的 SQL 服务器时出错

Error when connecting to SQL Server in docker container

我在 Windows Docker 容器中有一个 ASP.NET Core WebAPI 运行ning。我无法从应用程序内部连接到本地 SQL 实例。

这是错误信息:

(0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception (53): The network path was not found

我找到了 this issue on github,但它并不真正适用于我的情况。

我可以通过将实例名称替换为服务器本地 IP 地址来使一切正常,如下所示:

"ConnectionString_ThrowingError": "Data Source=MySqlInstance; (...)"
"ConnectionString_WorkingFine":   "Data Source=192.168.0.123; (...)"

这里发生了什么? .NET 似乎无法解析域计算机主机名。


其他详情

检查这个 docker-composer.yaml,networks 和 alias 部分很重要,上面的设置可以用 docker 命令生成而不是yaml.

    version: '3.4'

    services:
      some.api:
        image: ${DOCKER_REGISTRY-}someapi
        container_name: some.api
        build:
          context: .
          dockerfile: /Dockerfile
        ports:
          - "40080:80"
          - "44443:443"
        networks:
        - database
      some.db:
        image: microsoft/mssql-server-linux:2017-latest
        container_name: mssql1
        networks:
          database:
            aliases:
              - mssql1
        environment:
          - SA_PASSWORD=Pass@word
          - ACCEPT_EULA=Y
        ports:
          - "5454:1433"
    networks:
  database:
  • 网络被定义为从另一个容器访问容器。
  • 别名用于命名资源,对于上述代码段,连接字符串为:

Server=mssql1;Database=whatever_is_need;User Id=sa;Password=Pass@word;

根据我在评论中的建议,如果服务器名称不是完全限定域名 (FQDN),则可能无法将服务器解析为 IP。

尝试将服务器名称调整为 FQDN,希望这样可以解决问题。

否则,请查看 this one 等链接以从 SQL 服务器的角度计算名称解析,您将获得一些关于如何解决此类问题的其他想法问题。