【问题标题】:How to populate SQL Server database in Docker using .NET Core app?如何使用 .NET Core 应用程序在 Docker 中填充 SQL Server 数据库?
【发布时间】:2021-05-20 20:04:36
【问题描述】:

我有一个 .NET Core 应用,当通过dotnet run 命令运行它时,它会根据appSettings.json 中的ConnectionString 自动填充数据库,如下所示:

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost,21433;Initial Catalog=DemoDb;User Id=demo;Password=******;"
},

由于我的 Docker 容器中已经有一个 SQL Server 数据库,因此我想使用现有的服务器容器并将新数据库填充到 Docker 中。当我运行应用程序时,新数据库已填充,但应用程序未初始化。

我使用与上面ConnectionString 相同的端口号,但是在运行应用程序时它会抛出 “底层异常消息是'无法建立连接,因为目标机器主动拒绝它。(localhost:4200) '" 错误。我认为这与在此容器中与其他数据库使用相同的端口有关。

在这一步:

  • 我应该为这个新数据库创建一个新容器,还是为两个数据库使用相同的 SQL Server 容器?

  • 我可以使用与之前在 Docker 上安装的数据库相同的端口吗?或者我应该用连接字符串中的另一个端口来改变它?

抱歉,我是 Docker 新手。

【问题讨论】:

  • SQL Server 数据库本身不使用端口。服务器实例侦听端口。如果您已经在该容器中启动并运行了另一个数据库并且可以连接到它,那么您应该使用与其他数据库相同的连接字符串,但 Initial Catalog 值除外。初始目录应设置为您现在使用的数据库名称。

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


【解决方案1】:

Docker 的性质表明,如果数据库不相关,那么它们应该存在于单独的容器中。

如果需要在数据库之间进行交互,那么将它们放在同一个容器内的同一个实例上就可以了。

端口用于实例 - 不是单个数据库,但您需要在代码中包含一些标识所需数据库的内容 - 无论是 T-SQL 代码中的 USE 语句还是显式连接到新数据库。

您将用户定义在什么范围内?它是包含的数据库用户吗?如果是这样,那么您必须在连接字符串中指定正确的数据库 - 如果它在实例级别作为登录名,那么没关系,但它必须映射到该登录名的新数据库中的数据库用户。

【讨论】:

  • 非常感谢。由于数据库不相关,我可以创建一个新实例。为了为 MSSQL 创建 Docker 实例,我想我应该遵循以下页面上的内容:michalbialecki.com/2020/04/23/…
  • 该博客看起来很适合创建新容器。祝你好运
猜你喜欢
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多