【问题标题】:Microsoft SQL Server on Linux (docker) - connection refusedLinux (docker) 上的 Microsoft SQL Server - 连接被拒绝
【发布时间】:2017-10-01 09:14:15
【问题描述】:

我正在尝试从我的 Asp.Net Core 应用程序连接到我使用 docker 运行的 MSSQL,但我收到一条错误消息:

“发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:TCP 提供者,错误:35 - 捕获到内部异常)"

这是我的码头工人撰写:

  api:
    image: api
    container_name: api
    build:
      context: ./Api
      dockerfile: Dockerfile
    ports:
      - "8000:80"
    depends_on:
      - db
  db:
    image: "microsoft/mssql-server-linux"
    container_name: mssql
    environment:
        SA_PASSWORD: "YourStrong!Passw0rd"
        ACCEPT_EULA: "Y"
        MSSQL_PID: "Developer"
    ports:
      - "127.0.0.1:8001:1433"

和 appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "server=127.0.0.1,8001;database=MyTestDb;user=sa;password=YourStrong!Passw0rd"
  }
}

通过 SSMS 连接效果很好,但在我的代码中我尝试使用:

Database.EnsureCreated();

我遇到了上面描述的错误。

你知道我该如何处理这个问题吗?

【问题讨论】:

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


【解决方案1】:

你的问题是连接字符串

{
  "ConnectionStrings": {
    "DefaultConnection": "server=127.0.0.1,8001;database=MyTestDb;user=sa;password=YourStrong!Passw0rd"
  }
}

在 docker-compose 容器到容器网络中,您关心容器服务名称和容器本身暴露的端口。您不想考虑容器内部的主机端口映射。使用下面的连接字符串

{
  "ConnectionStrings": {
    "DefaultConnection": "server=db, 1433;database=MyTestDb;user=sa;password=YourStrong!Passw0rd"
  }
}

【讨论】:

  • 好的,但是当我尝试使用 dotnet ef migrations add InitialCreate from cmd 时,它找不到 sql server 实例。
  • 您在哪里以及如何运行这些命令?您应该在容器内而不是在主机上运行它们。使用docker-compose exec api bash并在那里执行命令或直接使用docker-compose exec api dotnet ...
  • 谢谢你,帮了我一点忙
猜你喜欢
  • 2019-10-18
  • 1970-01-01
  • 2013-09-20
  • 2017-10-01
  • 2017-07-10
  • 2018-07-03
  • 2020-02-22
  • 2016-02-14
  • 2018-07-14
相关资源
最近更新 更多