0

我有 2 个托管自己的服务器的 docker 容器。我还有一个托管 SQL Server 数据库的第三个 docker 容器。每台服务器都访问这个数据库。

我的 DB docker 容器在 docker-compose.yml 中配置如下:

my-db:
     image: microsoft/mssql-server-linux:latest
     environment:
       - ACCEPT_EULA=Y
       - SA_PASSWORD=******
     ports:
       - "1433:1433"

每个服务器连接字符串(它们是 .NET 服务器)都是

ConnectionStrings__Default=data source=my-db;initial catalog=TestDb;persist security info=True;user id=SA;password=******;

当我运行测试时,我从数据库的 docker 容器中获得了一个日志,上面写着它正在设置 SINGLE_USER 模式。这显然破坏了我的测试,因为两台服务器都必须访问它。

我尝试使用数据库浏览器设置 MULTI_USER 在哪个工作......直到测试开始......然后测试套件中的数据库或其他东西将其切换回 SINGLE_USER。

如何通过 docker compose、dockerfiles 或其他任何方式配置它以不设置 SINGLE_USER 模式或专门设置 MULTI_USER 模式?

以防万一:我还使用 Selenium 进行测试,使用 circleci 进行测试自动化。

4

1 回答 1

0

在搜索了代码库后,我发现它实际上与配置无关。我正在使用实体框架,并且单元测试在每次测试后都删除并重新迁移了数据库。调用 migrate 命令将数据库置于 SINGLE_USER 模式。当我出于好奇而删除迁移调用时发现了这一点,你瞧,没有设置 SINGLE_USER 模式。

我假设 migrate 调用 ( myDbContext.Database.Migrate()) 设置了模式,以便它将其他侦听器踢出,以免在迁移过程中引起冲突。但这只是一个猜测。我在网上找不到真正的答案。

所以简而言之,解决这个问题的方法是代码库设置了 SINGLE_USER 模式,我只需要找到调用。

于 2019-06-19T13:06:49.050 回答