我有2个托管各自服务器的docker容器。我还有一个托管SQL Server数据库的第三个Docker容器。每个服务器都访问该数据库。
我的数据库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容器获取了DB的日志,该日志表明已将SINGLE_USER模式设置为on。这显然破坏了我的测试,因为两个服务器都必须访问它。
我尝试使用数据库浏览器将MULTI_USER设置为可运行...直到测试开始...然后,数据库或测试套件中的某些内容将其切换回SINGLE_USER。
我该如何通过docker compose,dockerfiles或其他任何东西来配置它,以不将SINGLE_USER模式设置为开或将MULTI_USER模式设置为开?
如果有问题的话:我还将Selenium用于测试,将Circleci用于测试自动化。
答案 0 :(得分:0)
在仔细检查了代码库之后,我发现它实际上与配置无关。我正在使用Entity Framework,并且在每次测试后删除单元测试并重新迁移数据库。调用migration命令会将数据库置于SINGLE_USER模式。当我出于好奇而删除迁移调用时发现了这一点,瞧瞧,没有设置SINGLE_USER模式。
我假设迁移调用(myDbContext.Database.Migrate()
)设置了模式,以便将其他侦听器踢出,以免在迁移过程中引起冲突。但这只是一个猜测。我找不到关于为什么上网的真正答案。
简而言之,解决方案是代码库设置了SINGLE_USER模式,我只需要找到调用即可。