ASP.NET Core Mac Docker 上 SQL Server 运行 的连接字符串是什么?

What is the connection string for SQL Server running on Mac Docker in ASP.NET Core?

我正试图在 MAC 上完成关于 Pluralsight 的 ASP.NET 核心教程。我正在使用 Docker 运行ning MSSQL 服务器,它似乎工作正常(我有 sql 数据库并且 运行ning as shown here)

第二步是让我的 asp.net 核心应用程序连接到这个 mssql 数据库。这是我在 appsettings.json:

中的连接字符串
  "ConnectionStrings": {
    "OdeToFood2Db": "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=OdeToFood2;Integrated Security=True"
  }

这就是我在 startup.cs:

中的 ConfigureServices()
services.AddDbContextPool<OdeToFood2DbContext>(
                options =>
                {
                    options.UseSqlServer(Configuration.GetConnectionString("OdeToFood2Db"));
                }
            );

然后我尝试 运行

dotnet ef dbcontext info -s ../OdeToFood2/odeToFood2.csproj

但我得到了

Build started...
Build failed. Use dotnet build to see the errors.

错误。 我认为问题是我的连接字符串错误,因为我 运行 在 docker 上设置了我的 mssql 而不是像我正在关注的 tutorial 在本地。

如果有人能给我指出正确的方向,那肯定会有所帮助,我已经在这个问题上停留了 5 天了,这真是令人痛苦。提前致谢!

Docker 运行 在你的机器上有自己的内部虚拟网络,发现你的 SQL 容器的 IP/Hostname 应该有所帮助,因为从技术上讲你的 SQL实例 运行 正在容器中。

在你的 docker 机器上 运行

docker ps

这应该列出所有 运行ning 容器,其中一个应该是您的 SQL 容器。输出应类似于:

    CONTAINER ID   IMAGE          COMMAND                  CREATED      STATUS     PORTS        NAMES
    a8b6facb199c   SQL-Image     "some command"            X days ago   Up X days   8080        sqlserver

感兴趣的是 portsname 字段。您的端口字段应至少列出一个端口,这可能是您正在使用的 SQL 提供商的默认端口,但也可能不是。

我们现在有尝试连接的端口,现在我们需要 IP 地址。 运行 以下是上一个命令中 name 字段的值(或使用容器 ID)

docker inspect <image-name>

这将转储容器的属性,包括 IP 地址,这可能是 172.x IP 地址。

现在我们有了端口和 IP 地址,您应该可以修改连接字符串以指向这些值。

  "ConnectionStrings": {
    "MyWindowsConnection": "Server=(localdb)\mssqllocaldb;Database=TestWinMac;Trusted_Connection=True;",
    "MyMacConnection": "Server=localhost,1433;Initial Catalog=TestWinMac;User ID=SA;Password=MyP@ssword"
  }

查看我的标题为“我的Mac连接”的连接。 1433 是端口。 我有一个项目存在于 Mac 和 Windows 机器上,我根据我正在使用的平台切换连接字符串。